23

你们能否为我提供一个很好的示例代码,使用 EPOLLHUP 进行死对等处理?我知道这是一个检测用户断开连接的信号,但不确定如何在代码中使用它..提前谢谢..

4

1 回答 1

43

您用于EPOLLRDHUP检测对等关闭,而不是EPOLLHUP(这表示套接字意外关闭,即通常是内部错误)。

使用它非常简单,只需将标志与您要提供的任何其他标志“或” epoll_ctl。因此,例如,而不是EPOLLINwrite EPOLLIN|EPOLLRDHUP

之后epoll_waitif(my_event.events & EPOLLRDHUP)如果对方关闭连接(您可能想要关闭套接字),请执行任何您想做的事情。

请注意,从套接字读取时获得“零字节读取”结果意味着另一端已关闭连接,因此您也应该始终检查这一点,以避免令人讨厌的意外(FIN可能您从EPOLLIN您打电话之前read,如果您处于 ET 模式,您将不会再收到通知)。

于 2011-06-22T10:09:49.980 回答