对端的异常状况
可以通过read调用,对EOF的判断,随时防范对方程序崩溃
但是 不是每种情况都可以通过读操作来感知异常 比如服务器完全崩溃,或者网络中断的情况下,此时如果阻塞套接字,那么会一直阻塞在read等调用上,没有办法感知套接字异常
其实有几种办法来解决这个问题
第一个办法是给套接字的read操作设置超时,如果超过了一段时间就认为链接已经不存在,
struct timeval tv;
tv.tv_sec=5;
tv.tv_usec=0;
setsockopt(connfd,SQL_SOCKERT,SO_RECVTIMEO,(const char *) &tv,sizeof(tv));
设置了套接字的读操作超时,超时事件在5秒
第二个方法
添加对链接是否正常的检测。如果链接不正常,需要从当前read阻塞中返回并处理
还有一个办法 通过多路复用自带的超时能力,完成对套接字I/O检查