xml*_*lmx 6 c linux networking epoll api-design
根据linux 手册页,
EPOLLHUP
从诸如管道或流套接字的通道读取时,此事件仅表示对等方关闭其通道的末尾.
EPOLLRDHUP
流套接字对等关闭连接,或关闭写入一半的连接.
我几乎无法区分EPOLLHUP和EPOLLRDHUP.
对我来说,无论何时EPOLLRDHUP使用EPOLLHUP都可以使用相同的语义.
我对吗?如果没有,有什么解释吗?
EPOLLHUP意味着对等方关闭了连接。对连接的写入被关闭,并且在消耗任何(可能的)可读数据之后,从连接的读取也被关闭。EPOLLRDHUPonly 意味着对等方关闭了他们的连接,或者只关闭了一半的连接。如果它只是半关闭,流套接字就会变成单向、只写连接。写入连接可能仍处于打开状态,但在消耗任何(可能的)可读数据后,从连接读取数据将关闭。shutdown()如果对等方调用其套接字描述符,不允许自己写入数据,则可以完成此操作:
#include <sys/socket.h>
int sockfd = /* ... */;
shutdown(sockfd, SHUT_WR);
Run Code Online (Sandbox Code Playgroud)