epoll检测用户断线的最佳方法

时间:2011-06-22 00:30:34

标签: epoll

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

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

提前致谢..

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

  

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

不,没有。如果您需要发现一个不活跃或死亡的客户,您必须自己做。 (例如,向他们发送某种形式的心跳消息,看看他们是否在超时内响应/错误,或者按照您已经做的那样做,并在不活动的周期之后将其计时。)