你们能给我提供一个很好的示例代码,使用 EPOLLHUP 处理死节点吗?我知道这是检测用户断开连接的信号,但不确定如何在代码中使用它。提前致谢。
最佳答案
您使用 EPOLLRDHUP
来检测对等关闭,而不是 EPOLLHUP
(它表示套接字意外关闭,即通常是内部错误)。
使用它非常简单,只需将标志与您提供给 epoll_ctl
的任何其他标志“或”即可。因此,例如,将 EPOLLIN
写成 EPOLLIN|EPOLLRDHUP
。
在 epoll_wait
之后,执行 if(my_event.events & EPOLLRDHUP)
然后在对方关闭连接时执行任何您想执行的操作(您可能想要关闭套接字)。
请注意,从套接字读取时获得“零字节读取”结果也意味着另一端已关闭连接,因此您也应该始终检查这一点,以避免令人讨厌的意外(FIN
可能会在您从 EPOLLIN
唤醒后 到达,但在您调用 read
,如果您处于 ET 模式,您将不会收到其他通知)。
关于linux - 我如何使用 EPOLLHUP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6437879/