我正在使用 epoll 进行网络编程。我想知道检测用户断开连接的最佳方法。现在,我正在使用 select with timeout 来查看接收缓冲区中是否有信号并且在一定时间内没有信号,然后它会关闭套接字连接。
我认为可能还有其他更适合epoll而不是使用select的东西。
提前致谢..
我正在使用 epoll 进行网络编程。我想知道检测用户断开连接的最佳方法。现在,我正在使用 select with timeout 来查看接收缓冲区中是否有信号并且在一定时间内没有信号,然后它会关闭套接字连接。
我认为可能还有其他更适合epoll而不是使用select的东西。
提前致谢..
您仍然可以使用 epoll,并使用 epoll_wait 中的 timeout 参数来检测超时。
如果您有一个 TCP 会话并且想要检测远程对等方何时关闭您注册以接收EPOLLRDHUP
事件的连接,或者您可以通过errno == EAGAIN
在接收EPOLLIN
事件时获取并尝试从关闭的套接字读取(非阻塞)来检测它。
我认为可能还有其他更适合epoll而不是使用select的东西。
不,那里没有。如果你需要发现一个不活跃或死掉的客户,你必须自己做。(例如,向他们发送某种形式的心跳消息,看看他们是否在超时内响应/出错,或者像你已经在做的那样做,然后在一段时间不活动后将它们超时。)