【发布时间】:2014-12-03 20:29:53
【问题描述】:
我正在尝试学习如何将 epoll() 用于 tcp 服务器应用程序,因为我期待许多连接。 我尝试检查示例和教程,他们总是建议使用/设置在 epoll() 中添加的套接字为非阻塞套接字。为什么?
【问题讨论】:
-
你不能在一个线程上同时进行多个阻塞读取。
标签: c++ linux sockets epoll tcpserver
我正在尝试学习如何将 epoll() 用于 tcp 服务器应用程序,因为我期待许多连接。 我尝试检查示例和教程,他们总是建议使用/设置在 epoll() 中添加的套接字为非阻塞套接字。为什么?
【问题讨论】:
标签: c++ linux sockets epoll tcpserver
对于级别触发的 epoll,非阻塞套接字可以帮助最小化 epoll_wait() 调用,这是一个优化问题。
对于边缘触发的 epoll,您必须使用非阻塞套接字并调用 read() 或 write() 直到它们返回 EWOULDBLOCK。否则,您可能会错过内核通知。
您可以在这里找到详细答案:https://eklitzke.org/blocking-io-nonblocking-io-and-epoll
【讨论】: