原文地址:http://blog.csdn.net/god2469/article/details/8801356

下面来罗列一下判断远端已经断开的方法:

法一:

当recv()返回值小于等于0时,socket连接断开。但是还需要判断 errno是否等于 EINTR,如果errno == EINTR 则说明recv函数是由于程序接收到信号后返回的,socket连接还是正常的,不应close掉socket连接。

法二:

struct tcp_info info; 
  int len=sizeof(info); 
  getsockopt(sock, IPPROTO_TCP, TCP_INFO, &info, (socklen_t *)&len); 
  if((info.tcpi_state==TCP_ESTABLISHED))  则说明未断开  else 断开

法三:

若使用了select等系统函数,若远端断开,则select返回1,recv返回0则断开。其他注意事项同法一。

法四:

int keepAlive = 1; // 开启keepalive属性
int keepIdle = 60; // 如该连接在60秒内没有任何数据往来,则进行探测 
int keepInterval = 5; // 探测时发包的时间间隔为5 秒
int keepCount = 3; // 探测尝试的次数.如果第1次探测包就收到响应了,则后2次的不再发.

setsockopt(rs, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepAlive, sizeof(keepAlive));
setsockopt(rs, SOL_TCP, TCP_KEEPIDLE, (void*)&keepIdle, sizeof(keepIdle));
setsockopt(rs, SOL_TCP, TCP_KEEPINTVL, (void *)&keepInterval, sizeof(keepInterval));
setsockopt(rs, SOL_TCP, TCP_KEEPCNT, (void *)&keepCount, sizeof(keepCount));

设置后,若断开,则在使用该socket读写时立即失败,并返回ETIMEDOUT错误

法五:

自己实现一个心跳检测,一定时间内未收到自定义的心跳包则标记为已断开。

客户端怎么判断Socket连接已与服务器断开相关推荐

  1. (read/write、select、getsockopt、signal)实时判断socket连接状态/是否断开

    为什么socket服务器断开之后客户端还能发送一次数据呢? 文章目录 为什么socket服务器断开之后客户端还能发送一次数据呢? 一.了解背后的原因 1.客户端是如何将数据发送给服务器端的?(服务器端 ...

  2. java socket 判断Socket连接失效

    要判断socket连接链路是否可用时,不能通过socket.isClosed() 和 socket.isConnected() 方法判断,要通过心跳包 socket.sendUrgentData(0x ...

  3. 魔兽世界无限从服务器断开连接,wow无法连接服务器(魔兽世界7.0已从服务器断开51900319解决方法介绍)...

    wow无法连接服务器(魔兽世界7.0已从服务器断开51900319解决方法介绍),今天小游戏100网给大家整理了详细的wow无法连接服务器(魔兽世界7.0已从服务器断开51900319解决方法介绍)介 ...

  4. wow助手服务器断开,《魔兽世界》魔兽世界已从服务器断开玩家心得

    WOW已从服务器断开连接 LZ是这样的.. 有时候就是游戏内文件出问题了.. 把你FS所在的地图卡死了.. 只要叫朋友帮你上下FS..换到别的地方. 你就可以上了. .. 另外也可以叫GM帮助你... ...

  5. 如何判断Socket连接失效

    在开发工程中对Socket进行管理时对于这个连接的超时和是否失效进行研究. 对于连接超时和失效肯定会想到设置超时时间和判断连接是否可用.但是设置超时时间后起作用是在调用read方法的时候,如果只是设置 ...

  6. ol2与服务器连接中断,与服务器断开连接

    2009-08-06 总是服务器断开连接.... 极限封测服务器延迟开放公告 尊敬的玩家 为了保证服务器的稳定运行与游戏质量,同时解决部分玩家由于自动更新异常而无法正常登陆<宠物小精灵OL> ...

  7. 魔兽世界为什么一直连接不上服务器断开连接,魔兽世界怀旧服服务器断开

    魔兽世界怀旧服今日正式上线,不过因为涌入的玩家过多,造成了种种问题,比如排队,链接不上,卡蓝条等等,下面给大家带来魔兽世界怀旧服服务器断开连接的解决办法,魔兽世界怀旧服正式上线,有些玩家遇到了这个问题 ...

  8. socket连接不上服务器

    1 问题 :我做了个socket windows客户端,我的Linux虚拟机服务端能连接上,Linux密码机102的服务器连接不上. 解决办法:关掉windows的防火墙,并且要关掉虚拟机的防火墙ip ...

  9. 怀旧服显示已从服务器断开连接,魔兽世界怀旧服服务器进不去排队怎么办 服务器断开连接解决方法技巧分享...

    魔兽世界怀旧服最近上线了,其中服务器进不去怎么办?今天上午玩家过多导致服务器负载,出现了各种玩家进不去.排队.断开连接等问题,很多小伙伴都不太了解,那么下面就和91小编一起来看一下吧!希望可以帮助到大 ...

最新文章

  1. Android插件化原理解析——ContentProvider的插件化
  2. vuejs mvvm图解
  3. Struts 验证框架实现步骤
  4. 基于消息队列的UDP并发服务器v1
  5. Python学习之==常用模块
  6. webservice 视频教程 Spring+xfire 整合
  7. firefox插件使用感受
  8. 【语音信号处理四】DTW算法
  9. 新浪博客服务器是不是在维护,近日新浪博客发布文章不能正常显示是为什么?...
  10. html鼠标在ie上抖动,IE下CSS3动画抖动
  11. 如何删除Word文档中表格最后一行多出的空白页
  12. [RK3288][Android6.0] 调试笔记 --- apk安装添加黑名单
  13. 关于使用pop()的用法
  14. 数据平台初试(产品篇)——短视频直播监测案例分享
  15. Liunx——参考数据与延伸阅读
  16. 漏电检测系统客户端上位机设计
  17. 游戏应用出海本地化策略,巴西篇
  18. spring boot信佳玩具有限公司仓库管理系统毕业设计源码011553
  19. 燃气管道定位83KHZ地下电子标识器探测仪ED-8000操作指南
  20. OpenCV安装和Visual Studio2022编译器安装下载、测试运行(C++)

热门文章

  1. 振动试验,振动耐久试验,专业环境试验机构,
  2. [week13] TT的神秘礼物2
  3. 阿里云ECS云服务器课程_1 云服务器入门
  4. 苹果笔记本能玩英雄联盟吗_英雄联盟手游可以玩云顶之弈吗 LOL手游玩法一览_英雄联盟手游...
  5. WPF Textbox自动换行
  6. 2.你了解DevOps吗?
  7. 玩客云安装好armbian5.9后后续安装宝塔7.x版本
  8. JFreeChart
  9. JAVA获取汉字首字母以及全拼
  10. 魔兽 星际 红警 完全对比