根据Linux man page,
EPOLLHUP
从管道或溪流插座等通道读取时, 此事件仅指示对等方关闭了其通道的末端。
EPOLLRDHUP
流套接字对等端关闭连接,或关闭写入一半连接。
我几乎无法分辨EPOLLHUP
和EPOLLRDHUP
之间的区别。
对我来说,每当使用EPOLLRDHUP
时,EPOLLHUP
都可以以相同的语义使用。
我是对的吗?如果没有,有什么解释吗?
答案 0 :(得分:-1)
EPOLLHUP
表示对等端关闭了连接端。 对连接的写入已关闭,并且在使用任何(可能的)可读数据后,从连接中读取的数据也会关闭。EDPOLLRDHUP
仅表示对等方关闭了它们的连接,或仅关闭了一半的连接。如果它只是半关闭,则流套接字将变成单向、只写连接。 对连接的写入可能仍处于打开状态,但在消耗了任何(可能的)可读数据后,将从连接中读取的数据关闭。如果对等方在其套接字描述符上调用 shutdown()
,不允许自己写入数据,则可以这样做:
#include <sys/socket.h>
int sockfd = /* ... */;
shutdown(sockfd, SHUT_WR);