你们能为我提供一个很好的示例代码,使用EPOLLHUP进行死对等处理吗?我知道这是一个检测用户断开连接但不确定如何在代码中使用它的信号.谢谢提前..
我阅读了libevent epoll中的代码,下面是代码:
if (what & (EPOLLHUP|EPOLLERR)) {
ev = EV_READ | EV_WRITE;
} else {
if (what & EPOLLIN)
ev |= EV_READ;
if (what & EPOLLOUT)
ev |= EV_WRITE;
if (what & EPOLLRDHUP)
ev |= EV_CLOSED;
}
Run Code Online (Sandbox Code Playgroud)
据我了解,当发生EPOLLERR或EPOLLHUP时,应关闭连接。但是在上面的代码中,当遇到EPOLLHUP | EPOLLERR时,事件掩码设置为EV_READ | EV_WRITE。所以我的问题是:
提前致谢!
根据linux 手册页,
EPOLLHUP
从诸如管道或流套接字的通道读取时,此事件仅表示对等方关闭其通道的末尾.
EPOLLRDHUP
流套接字对等关闭连接,或关闭写入一半的连接.
我几乎无法区分EPOLLHUP和EPOLLRDHUP.
对我来说,无论何时EPOLLRDHUP使用EPOLLHUP都可以使用相同的语义.
我对吗?如果没有,有什么解释吗?