你们可以使用EPOLLHUP为我提供一个很好的示例代码来进行死对等处理吗?我知道这是一个检测用户断开连接但不确定如何在代码中使用它的信号。提前谢谢..
答案 0 :(得分:34)
使用EPOLLRDHUP
检测对等关闭,而不是EPOLLHUP
(表示套接字意外关闭,即通常是内部错误)。
使用它非常简单,只是“或”带有您向epoll_ctl
提供的任何其他标志的标志。因此,例如,而不是EPOLLIN
写EPOLLIN|EPOLLRDHUP
。
在epoll_wait
之后,如果另一方关闭了连接(你可能想要关闭套接字),请执行if(my_event.events & EPOLLRDHUP)
后跟任何你想要做的事情。
请注意,从套接字读取时获取“零字节读取”结果意味着另一端已关闭连接,因此您应该始终检查它,以避免令人讨厌的意外(FIN
可能会在之后从<{1}}中醒来但在之前呼叫EPOLLIN
,如果您处于ET模式,你不会收到另一个通知。)