SO_KEEPALIVE 保持连接检测对方主机是否崩溃,避免(服务器)永远阻塞于TCP连接的输入。设置该选项后,如果2小时内在此套接口的任一方向都没有数据交换,TCP就自动给对方 发一个保持存活探测分节(keepalive probe)。这是一个对方必须响应的TCP分节.它会导致以下三种情况:对方接收一切正常:以期望的ACK响应。2小时后,TCP将发出另一个探测分节。对方已崩溃且已重新启动:以RST响应。套接口的待处理错误被置为ECONNRESET,套接 口本身则被关闭。对方无任何响应:源自berkeley的TCP发送另外8个探测分节,相隔75秒一个,试图得到一个响应。在发出第一个探测分节11分钟15秒后若仍无响应就放弃。套接口的待处理错误被置为ETIMEOUT,套接口本身则被关闭。如ICMP错误是“host unreachable(主机不可达)”,说明对方主机并没有崩溃,但是不可达,这种情况下待处理错误被置为 EHOSTUNREACH。
在该书的第158页有更详细的描述。
根据上面的介绍我们可以知道对端以一种非优雅的方式断开连接的时候,我们可以设置SO_KEEPALIVE属性使得我们在2小时以后发现对方的TCP连接是否依然存在。
keepAlive = 1;
Setsockopt(listenfd, SOL_SOCKET, SO_KEEPALIVE, (void*)&keepAlive, sizeof(keepAlive));
如果我们不能接受如此之长的等待时间,从TCP-Keepalive-HOWTO上可以知道一共有两种方式可以设置,一种是修改内核关于网络方面的配置参数,另外一种就是SOL_TCP字段的TCP_KEEPIDLE, TCP_KEEPINTVL, TCP_KEEPCNT三个选项。
分享到:
相关推荐
Echo service using TCP sockets between two systems with socket options SO_REUSEADDR, SO_KEEPALIVE, TCP_NODELAY and SO_LINGER
TCP keepalive:TCP keepalive:参考于RFC1122 TCP内建的option,由c socket或kernel设置参数: TCP_KEEPCNT - tcp_keepalive_probes (重试几次决定断线) TCP_KEEPINTVL - tcp_keepalive_intvl(ACK传了多久没回应要重试)...
nginx upstream 连接池 ngx_http_upstream_keepalive-d9ac9ad67f45.tar.gz
设置好keepalive以后,我们通过实验来看看当client异常退出或是网络断掉的情况下,keepalive怎么通知我们异常断开的情况。这里采用select模式,实验环境为XP系统和Win7系统,几种情况返回值如下: 1. 正常断开 ...
这是关于WinSock_TCP_keepalive内容的知识。 通信机制中,对方是否断开,有两种判断方法。 一种就是使用心跳包,另一种就是使用KEEPALIVE.这就是关于keepalive的介绍资料
centos7-lvs+keepalive部署.
nginx第三方插件,用于连接mysql数据库,提升nginx连接mysql的性能,
keepalive是在TCP中一个可以检测死连接的机制,作用是保持socket长连接不被断开,属于tcp层的功能,并不属于应用层。 TCP层怎么做到保持长连接的呢? 先看keepalive的用法:有三个参数,开放给应用层使用 sk->...
LVS-DR+keepalive+ldirectord 构建高可用负载均衡群集试验手册
Linux内置支持keepalive机制,为了使用它,你需要使能TCP/IP网络,为了能够配置内核在运行时的参数,你还需要procfs和sysctl的支持。 这个过程涉及到keepalive使用的三个用户驱使的变量: tcp_keepalive_time...
:link: 净keepalive 使用模块的Node缺少的( TCP_KEEPINTVL和TCP_KEEPCNT ) SO_KEEPALIVE套接字选项设置程序和获取程序。 经过测试 :penguin: linux & :green_apple: osx ( amd64和arm64都应该) :smiling_face_...
Sensu Go处理程序事件KeepAlive通过TTL Sensu Go Hangouts聊天处理程序是一个,它通过临时管理消息消息"level":"warning",... 从sensu-event-keepalive-ttl-handler存储库的本地路径中: go build -o /usr/local/bin/
at setup (/Users/Razvan/work/test/vue3-ssr-bug-keepalive/node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:2498:27) at callWithErrorHandling (/Users/Razvan/work/test/vue3-ssr-bug-keepalive/node...
Linux平台下的看门狗驱动,在8180下运行良好,移植方便
nodejs-socket-keepalive 创建此项目是为了探索 Node.js 中套接字上 setKeepAlive() 选项的行为。 使用服务器和客户端从两端测试 KeepAlive 行为。 使用不同的机器和/或防火墙规则来模拟网络故障。 背景故事 曾经有...
一级dss-GB28181接入GBS,IPC 注册、catalog、keepalive、invite、bye
这是我在学习socket时对socket建立之后连接情况监测方法的总结,希望对你有所帮助。
springboot keepalive 服务端,客户端测试
在你的应用中安装 React Keep Alive:npm install --save react-component-keepalive:hammer: 使用React Keep Alive 提供了 , 你必须把 <KeepAlive> 放在 Provider 里面。import React from 'react';import Reac
so_keepalive tcp_nodelay 超时 解析器 resolver_timeout 允许 否定 访问日志 方向对齐 client_body_buffer_size lua_code_cache lua_package_path lua_package_cpath process_by_lua process_by_lua_file ...