TCP连接异常断开的检测
时间:2017-01-05作者:华清远见
TCP是一种面向连接的协议,连接的建立和断开需要通过收发相应的分节来实现。某些时候,由于网络的故障或是一方主机的突然崩溃而另一方无法检测到,以致始终保持着不存在的连接。下面介绍一种方法来检测这种异常断开的情况 1) 在TCP协议中提供了KEEPALIVE检测。该选项使能后,在一个TCP连接上,若指定的一段时间内没有数据交换,则自动发送分节等待对方确认。
SO_KEEPALIVE : 该选项设置是否打开探测 2) 设定探测相关选项值
int keepalive = 1; // 打开探测 3) 设置套接字的属性
if (setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepalive, sizeof (keepalive) < 0) 一旦打开KEEPALIVE探测,当TCP连接异常断开后,对sockfd进行recv操作会返回-1,并且errno的值为ETIMEDOUT。 这样一来就可以很方便的在应用程序中检测TCP连接的情况,如果检测到异常断开简单的处理就是关闭连接。
发表评论
|