4

我正在使用 epoll 进行网络编程。我想知道检测用户断开连接的最佳方法。现在,我正在使用 select with timeout 来查看接收缓冲区中是否有信号并且在一定时间内没有信号,然后它会关闭套接字连接。

我认为可能还有其他更适合epoll而不是使用select的东西。

提前致谢..

4

2 回答 2

3

您仍然可以使用 epoll,并使用 epoll_wait 中的 timeout 参数来检测超时。

如果您有一个 TCP 会话并且想要检测远程对等方何时关闭您注册以接收EPOLLRDHUP事件的连接,或者您可以通过errno == EAGAIN在接收EPOLLIN事件时获取并尝试从关闭的套接字读取(非阻塞)来检测它。

于 2013-11-29T01:07:28.203 回答
1

我认为可能还有其他更适合epoll而不是使用select的东西。

不,那里没有。如果你需要发现一个不活跃或死掉的客户,你必须自己做。(例如,向他们发送某种形式的心跳消息,看看他们是否在超时内响应/出错,或者像你已经在做的那样做,然后在一段时间不活动后将它们超时。)

于 2011-06-22T00:37:04.483 回答