我如何检查客户端连接仍然有效

问题描述

| 我正在使用epoll进行网络编程。我有一个连接列表,并将每个客户端都放在列表中。如果用户正常断开连接,我可以通过读取0来检测用户断开连接。但是,如果用户以某种方式意外断开连接,则只有在尝试向用户发送数据之前,它才知道这一点。 我不认为epoll提供了一种处理此问题的好方法。所以我认为我应该自己处理。如果你们能为我提供任何与此示例相关的示例或参考,我将不胜感激。     

解决方法

        如果另一端断开连接,epoll_wait将为套接字返回一个EPOLLHUP或EPOLLERR。 EPOLLHUP和EPOLLERR是自动设置的,但是您也可以设置较新的EPOLLRDHUP,它显式报告对等体关闭。 同样,如果您使用带有标志MSG_NOSIGNAL的send,它将在关闭的连接上设置EPIPE。   int resp =发送(袜子,buf,buflen,MSG_NOSIGNAL);      if(resp == -1 && errno == EPIPE){/ *另一面消失* /} 比发出信号要好得多。     ,        如何使用TCP Keepalive:http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/overview.html。请参阅“检查是否有死对等项”。同一站点的后面部分提供示例代码:http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/programming.html。