我有一个fd:
socket(AF_INET6, SOCK_STREAM, ...)
bind(fd, ...)
listen(fd, ...)
我有epoll
个实例。我需要知道,我应该通过epoll_ctl
订阅哪些活动?我需要边缘触发模式。
我有那些标志atm:EPOLLET | EPOLLIN
我应该订阅EPOLLRDHUP
,EPOLLOUT
,EPOLLPRI
吗?
我应该处理EPOLLHUP
,EPOLLERR
吗?为什么会发生?
答案 0 :(得分:0)
您具体询问用于接受传入连接的被动套接字
要求。 man epoll中的示例没有为监听套接字订阅EPOLLRDHUP
,EPOLLOUT
,EPOLLPRI
,这是可以理解的:
EPOLLOUT
表示:现在写入不会阻止。 - 被动套接字上没有写入内容。EPOLLRDHUP
适用于连接。被动插座上没有连接。EPOLLPRI
表示:有紧急数据需要阅读。被动插座上没有紧急数据。此示例也不处理侦听套接字的EPOLLHUP
,EPOLLERR
。这对于EPOLLHUP
至少是可以理解的,因为这仅适用于输出。我知道在任何情况下都不会为被动套接字返回EPOLLERR
。