我如何使用EPOLLHUP

use*_*799 20 linux networking epoll

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

Dam*_*mon 36

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

使用它非常简单,只是"或"带有任何其他标志的标志epoll_ctl.所以,例如,而不是EPOLLINEPOLLIN|EPOLLRDHUP.

之后epoll_wait,if(my_event.events & EPOLLRDHUP)如果对方关闭连接,则执行后跟任何您想要执行的操作(您可能希望关闭套接字).

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

  • 达蒙,你能否扩大"读取()返回零"的情况?[我指的是最后一段.]订阅EPOLLRDHUP后,当对等关闭连接时,此标志将始终在epoll_wait()中设置.嗯,这正是它的目的!如果在关闭的情况下没有设置EPOLLRDHUP,那显然是一个内核错误.因此,可以肯定地说,当read()返回0时,设置EPOLLRDHUP或EPOLLHUP或EPOLLERR.在我的测试中,我无法模拟你的假设,坦率地说,这是我第一次听说过它.您是否有任何其他信息或至少 (2认同)