如何判断TcpClient已断开连接

 我来答
深圳市励拓软件有限公司
2017-04-21 · 互联网+时代高效组织信息化平台
深圳市励拓软件有限公司
汇讯WiseUC企业即时通讯软件是一款以组织内沟通交流为基础,即时通讯为核心,融合办公协同、IT系统集成,帮助企业降低运营成本、提升组织效率的企业级沟通协同平台。
向TA提问
展开全部
Socket在连接以后,如果客户端非正常退出,比如网线掉了、超时退出等,服务器端的socket仍然有缓存,此时可以从该socket描述符中读出一些数据,短时间内甚至可以写,因此判断TCP socket是否断开及其不易,网上有很多方法,都不能精确判断。本人用select和recv写了一个,在缓冲区被读完以后判断非常管用。这里,recv时使用MSG_PEEK参数,数据不会从缓冲区中清除掉,因此不会影响正常的读写。 /* check whether socket is connected. Actually, it is not accurate if the client * crashs and the server don't know about it because the socket buffer is ready. * So the return value '0' doesn't mean the socket is really valid. Of course, * '-1' shows the socket is invalid*/int checksock(int s){fd_set fds; char buf[2]; int nbread; FD_ZERO(&fds); FD_SET(s,&fds); if ( select(s+1, &fds, (fd_set *)0, (fd_set *)0, NULL) == -1 ) { //log(LOG_ERR,"select(): %s\n",strerror(errno)) ;return -1;}if (!FD_ISSET(s,&fds)) { //log(LOG_ERR,"select() returns OK but FD_ISSET not\n") ;return -1;}/* read one byte from socket */
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式