c++ - 为什么在 epoll 中推荐 NON-BLOCKING sockets

标签 c++ linux sockets epoll tcpserver

我正在尝试学习如何将 epoll() 用于 tcp 服务器应用程序,因为我需要很多连接。 我尝试检查样本和教程,他们总是建议使用/设置在 epoll() 中添加的套接字为非阻塞套接字。为什么?

最佳答案

对于级别触发的 epoll,非阻塞套接字可以帮助最小化 epoll_wait() 调用,这是一个优化问题。

对于边缘触发的 epoll,您必须使用非阻塞套接字并调用 read() 或 write() 直到它们返回 EWOULDBLOCK。否则,您可能会错过内核通知。

您可以在这里找到详细的答案:https://eklitzke.org/blocking-io-nonblocking-io-and-epoll

关于c++ - 为什么在 epoll 中推荐 NON-BLOCKING sockets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26269448/

相关文章:

linux - 无法使用主管运行 ffmpeg 进程

c# - NAudio AsioOut + socket

sockets - 接受套接字后会发生什么? [复制]

Java,使用套接字连接发送消息时出现问题

c++ - openssl 中已弃用的 AES_ige_encrypt() API 的替代方案

c++ - 一个递归函数,用于打印整数的素因子分解元素

linux - 在 Linux 和 Perl 中列出文件夹的绝对路径

android - 如何将openssl集成到Android中?

c++ - int64_t 再次加倍到 int64_t,精度损失

C++ wxWidgets Code::Blocks 自定义项目 "normal"编译和 C++11 启用期间的交叉编译链接错误