Wil*_*ill 6 c sockets linux epoll tcp
从epoll_ctl的手册:
EPOLLRDHUP(自Linux 2.6.17起)
流套接字对等关闭连接,或关闭写入一半的连接.(此标志对于编写简单代码以在使用边缘触发监视时检测对等关闭特别有用.)
从recv手册:
如果没有可用的消息被接收并且对等体已经执行了有序关闭,则recv()将返回0.
在我看来,那么,以上的盖的同一场景,只要我抓住EPOLLRDHUP事件首先,我不应该收到read()或长度为零的recv()(因此不需要费心检查这样的).但这是否保证是真的?
如果你得到一个事件EPOLLRDHUP=1然后立即关闭连接而不阅读.如果你得到一个事件EPOLLRDHUP=0,并EPOLLIN=1再继续读,但你应该准备处理的可能性recv()仍然返回0,以防万一.也许是FIN在你到达之后EPOLLIN=1但在你实际打电话之前到达的recv().