linux - 我如何使用 EPOLLHUP

标签 linux networking epoll

你们能给我提供一个很好的示例代码,使用 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/

相关文章:

c - 使用异步 I/O 的消息排序 (epoll)

linux - 如何在特定时间内将内存使用量增加到特定级别

c - 有没有办法确定信号如何传递,等待给定的进程 ID?

networking - EC2 实例不响应内部 ping

linux - 如何使用epoll?

python - epoll 如何在 Python 中检测客户端关闭?

linux - 如何根据搜索在文件内容中附加字符串

PHP脚本复制

apache - 将 HTTP 请求重定向到 2 个不同的服务器

python - 扭曲忽略从 MUD 客户端发送的数据?