从 epoll_ctl 的手册中:
EPOLLRDHUP(自 Linux 2.6.17 起)
Stream socket peer 关闭连接,或者关闭写入一半的连接。(此标志对于编写简单代码以在使用边缘触发监视时检测对等关闭特别有用。)
从recv的手册:
如果没有消息可以接收并且对等方已经执行了有序关闭,recv() 将返回 0。
在我看来,上述两种情况都涵盖了相同的场景,只要我首先捕获 EPOLLRDHUP 事件,我就永远不会收到长度为 0 的 read() 或 recv() (因此不需要打扰检查此类)。但这能保证是真的吗?