TCP正常的断开,通信双方(服务端和客户端)都是能知道的。但是非正常的断开,比如直接拔掉了网线,就只能靠如下两种方法,实现短时间内的检测。

一、心跳包机制
心跳包机制,是网游设计中的常用机制。从用户层面,自己发包去判断对方连线状态。可以根据情况,很灵活的使用。比如,20秒发送一个最小的数据包(也可以根据实际情况稍带一些其他数据)。如果发送没有回应,就判断对方掉线了。 二、利用tcp_keepalive机制
利用TCP的机制,通过设置系统参数,从系统层面,监测tcp的连接状态。以下为linux下的方法:
、首先查看系统tcp_keepalive相关参数(centos和Ubuntu)
# sysctl -a|grep tcp_keepalive
显示如下:
net.ipv4.tcp_keepalive_intvl =
net.ipv4.tcp_keepalive_probes =
net.ipv4.tcp_keepalive_time =
分别说一下这三个参数:
tcp_keepalive_time 参数:
是指TCP发送keepalive消息的频度,默认为7200秒,也就是两个小时。
keepalive_intvl 参数:
当探测没有确认时,重新发送探测的频度。默认是75秒。
keepalive_probes 参数:
在认定连接失效之前,发送多少个TCP的keepalive探测包。默认值是9次。 、修改系统的tcp_keepalive相关参数
在知道以上三个系统参数的定义和作用之后,我们来修改一下这三个参数:
修改/etc/sysctl.conf文件:
# vi /etc/sysctl.conf
在打开的文件中,加入如下三行:
net.ipv4.tcp_keepalive_intvl =
net.ipv4.tcp_keepalive_probes =
net.ipv4.tcp_keepalive_time =
保存文件。 、重启服务器
# reboot
附注:或者临时使系统设置生效也行:# sysctl -p 、修改程序代码部分。
注意:仅仅配置内核参数是不够的,还必须在编程的时候设置套接字的选项,调用函数是
socket.setsockopt(level, optname, value)
示例:
level为SOL_SOCKET的话,选项为SO_KEEPALIVE,值为布尔。
socket.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, True)
此外还可以设置TCP选项(设置的level为SOL_TCP而不是SOL_SOCKET)覆盖系统全局设置
TCP_KEEPCNT 与tcp_keepalive_probes 对应
TCP_KEEPIDLE 与tcp_keepalive_time 对应
TCP_KEEPINTVL 与tcp_keepalive_intvl 对应

监测CentOS下TCP断线的更多相关文章

  1. [转]CentOS下性能监测工具 dstat

    原文链接:http://www.bkjia.com/Linuxjc/935113.html 参考链接:https://linux.cn/article-3215-1.html,http://lhfli ...

  2. CentOS下性能监测工具 dstat

    原文链接:http://www.bkjia.com/Linuxjc/935113.html 参考链接:https://linux.cn/article-3215-1.html,http://lhfli ...

  3. CentOS下开启mysql远程连接,远程管理数据库

    当服务器没有运行php.没装phpmyadmin的时候,远程管理mysql就显得有必要了.因为在CentOS下设置的,所以标题加上了CentOS,以下的命令在debian等系统下应该也OK. mysq ...

  4. Redis 对比 Memcached 并在 CentOS 下进行安装配置

    了解一下 Redis Redis 是一个开源.支持网络.基于内存.键值对的 Key-Value 数据库,使用 ANSI C 编写,并提供多种语言的 API ,它几乎没有上手难度,只需要几分钟我们就能完 ...

  5. CentOS下SNMP的安装与使用

    CentOS下SNMP的安装与使用   导读 简单网络管理协议(SNMP),由一组网络管理的标准组成,包含一个应用层协议(application layer protocol).数据库模型(datab ...

  6. Linux centOS下搭建RTMP服务器的具体步骤

    以下的所需的安装包,可直接在linux系统终端下载,也可从其他地方下载之后拷到对应目录下解压使用,遇到连接不到国外网站时可改变压缩包地址 1.安装依赖包: #yum install glibc.i68 ...

  7. Centos下使用Heartbeat实现集群[转]

    Linux 包括 CentOS 下高可用性(HA:High Availability)集群方案很多,而 Heartbeat 是比较常见和性价比比较高的一种。一、硬件及网络连接 群集一般需要2台以上服务 ...

  8. Centos下LAMP环境搭建

    CentOs下环境搭建.2015.04.15.0001 Author:周凯 Time: 2015.04.15 版本号:2015.04.15.0001 安装过程 安装apache yum install ...

  9. linux/centos下安装nginx(rpm安装和源码安装)详细步骤

    Centos下安装nginx rpm包                                                                                 ...

随机推荐

  1. 使用 Headless Chrome 进行页面渲染 - 知乎专栏

    使用 Headless Chrome 进行页面渲染 - 知乎专栏 使用 Headless Chrome 进行页面渲染 - 知乎专栏 这里我们使用 chrome-remote-interface 来远程 ...

  2. jQuery动画高级用法(上)——详解animation中的.queue()函数

    如果你拿着一个疑问去找专业人士寻找答案,那么你的一个疑问会变成三个,因为他会用另外两个令你更加一头雾水的名词来解释你的这个疑问. 我想这是大多数,包括我在内,IT人在学习过程中碰到的最大问题.当你有一 ...

  3. WordPress 客户端软件列表

    Windows: BlogDesk BlogJet Blog Writer Chrysanth WebStory Deepest Sender (Firefox或SeaMonkey扩展,跨平台- De ...

  4. Tasker to detect and vibrate once the ougoing call is being answered

    I happen to find that for GSM standard phone, call duration would be created into sql database only ...

  5. A profile to detect when a SMS database has been changed

    http://webmail.dev411.com/t/gg/tasker/12bdddbsak/a-profile-to-detect-when-a-sms-has-been-sent A bela ...

  6. Tasker 模拟重复点击按钮

    http://stackoverflow.com.80bola.com/questions/21544271/android-tasker-app-advance-input-shell-comman ...

  7. SQL 列转行,即多行合并成一条

    需求:按照分组,将多条记录内容合并成一条,效果如下: 数据库示例: CREATE TABLE [t2]([NID] [bigint] NULL,[district] [nvarchar](255) N ...

  8. 第三方网站返回hybrid app H5页面缓存问题应对策略

    最近负责公司各产品线购买模块的开发,各项功能如期开发完成后测试那边反馈回来一个问题:IOS手机在点击支付宝购买后,跳转到支付宝网站时不输入支付密码,直接点返回,返回到我们自己的APP购买界面发现页面显 ...

  9. myeclipse 修改freemarker ftl 不重启tomcat

    最 近的项目是SSH,View层采用Freemarker,但是遇到了一个很大问题,每次修改完ftl文件,都要重新启动tomcat才可以看到所修改的内 容,不但麻烦,而且浪费时间,特别怀念jsp,后来在 ...

  10. android之使用mvn构建创造项目步骤

    转自:http://blog.csdn.net/luhuajcdd/article/details/8132386 手动的创建自己的android application   1.用android t ...