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;}
相关文章推荐
- 数据挖掘(9):BP神经网络算法与实践
- 制作根文件系统:make[1]: *** [miscutils/ubi_tools.o] 错误 1 --来源于网络
- TCP/IP发送图片,swing.JPanel显示并更新图片(一、图片显示和更新)
- Java HTTP请求
- 【网络】(一)Socket 简介
- 解释器与编译器 (本文转自:http://blog.chinaunix.net/uid-22363424-id-113275.html)
- 使用HttpURLConnection(实现单线程多线程下载)
- Linux tcpdump命令详解
- C++ 用libcurl库进行http通讯网络编程
- 网络配置
- linux网络设置(有网卡别名介绍)
- thttpd增加gzip压缩响应报文体功能,以减少传输数据量
- 卷积神经网络的一些细节
- 利用iftop查看网络带宽使用情况
- Ubuntu实现网络链接设置
- 旧手机利用 第二弹 ——网络摄像头
- 【CCF】无线网络
- JavaWeb——HTTP协议头部分析
- Socket/TCP粘包、多包和少包, 断包
- 黑马程序员----网络编程