海阔天空

海阔凭鱼跃 天高任鸟飞

 

网络断连检测慢慢积累

///////////////////////////////////////////////////////////////////////////////////////////////////////

socket怎样检测断连

1. TCP协议在协议当中已经处理了丢包重发,在应用层可以认为是可靠的。
2. 之所以需要心跳包,是因为在异常断开的情况下系统检查出断线状态所需要的时间相当长,最长达4分钟,这对于应用程序是无法容忍的,所以就通过自定义心跳包的机制来实际断线检测,也正因为连接的异常检测需要相当长的时间,为了防止设置不当的心跳间隔,而最好增加一定复杂度的判断逻辑。  

  ////这样判断超时
int Send(const char* pch, const int nSize, const int nSecs)
{
FD_SET fd = {1, m_hSocket};
TIMEVAL tv = {nSecs, 0};
if(select(0, NULL, &fd, NULL, &tv) == 0)
{
//timeout
}
int nBytesSent = 0;
if((nBytesSent = send(m_hSocket, pch, nSize, 0)) == SOCKET_ERROR) {
//error
}
return nBytesSent;
}
超时时间自己设  
还可以发送三次探测数据包 等待回应 一定时间内没有回应则认为掉线

唯一, 我不确定的就是超时时间了,网络复杂啊 

///////////////////////////////////////////////////////////////////////////////////////////////////////


posted on 2010-04-08 15:19  liuym  阅读(444)  评论(3编辑  收藏  举报

导航