您的位置:首页 > 理论基础 > 计算机网络

Linux网络编程中服务端判断客户端断开连接。

2015-09-12 10:38 686 查看
</pre> 项目使用了select模型,所以这里只贴出此模型下的客户端连接断开判断:<p></p><p>主要是select返回后,正常recv,如果recv的返回值小于0则表示客户端连接已断开。</p><p></p>
<pre name="code" class="cpp">/*select等待*/err = select(maxfd + 1, &scanfd, NULL, NULL, &timeout) ;switch(err){case 0:/*超时*///g_log.Error("连接超时!");break;case -1:/*错误发生*/g_log.Error("连接异常!");break;default:/*有可读套接字文件描述符*///g_log.Debug( "data come" );if(m_connect_number<=0)break;for(i = 0; i < TCPServer::m_maxClient; i++){/*查找激活的文件描述符*/if( m_pconnectHost[i] != -1 ){if( FD_ISSET(m_pconnectHost[i], &scanfd) ){memset( &m_pbuf[0], 0, m_bufLen );/*清零*/n = recv( m_pconnectHost[i], &m_pbuf[0], m_bufLen, 0);/*接收发送方数据*/if(n > 0)/*判断是否合法接收数据*/{memset( &m_pbuf[0], 0, m_bufLen);/*清零*/now = time(NULL);/*当前时间*/sprintf( &m_pbuf[0], "%24s\r\n",ctime(&now));/*将时间拷贝入缓冲区*/g_log.Debug( string(&m_pbuf[0]) );send(m_pconnectHost[i], &m_pbuf[0], strlen( &m_pbuf[0] ),0);/*发送数据*/}else{g_log.Error("客户端连接已关闭!");/*关闭客户端*/close(m_pconnectHost[i]);/*更新文件描述符在数组中的值*/m_pconnectHost[i] = -1;m_connect_number --;	/*客户端计数器减1*/}}}}break;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: