socket心跳机制so_keepalive的三个参数详解
SO_KEEPALIVE 保持连接检测对方主机是否崩溃,避免(服务器)永远阻塞于TCP连接的输入。
设置该选项后,如果2小时内在此套接口的任一方向都没有数据交换,TCP就自动给对方 发一个保持存活探测分节(keepalive probe)。这是一个对方必须响应的TCP分节.它会导致以下三种情况:
1、对方接收一切正常:以期望的ACK响应,2小时后,TCP将发出另一个探测分节。
2、对方已崩溃且已重新启动:以RST响应。套接口的待处理错误被置为ECONNRESET,套接 口本身则被关闭。
3、对方无任何响应:源自berkeley的TCP发送另外8个探测分节,相隔75秒一个,试图得到一个响应。在发出第一个探测分节11分钟15秒后若仍无响应就放弃。套接口的待处理错误被置为ETIMEOUT,套接口本身则被关闭。如ICMP错误是“host unreachable(主机不可达)”,说明对方主机并没有崩溃,但是不可达,这种情况下待处理错误被置为 EHOSTUNREACH。
有关SO_KEEPALIVE的三个参数详细解释如下:
(16)tcp_keepalive_intvl,保活探测消息的发送频率。默认值为75s。
发送频率tcp_keepalive_intvl乘以发送次数tcp_keepalive_probes,就得到了从开始探测直到放弃探测确定连接断开的时间,大约为11min。
(17)tcp_keepalive_probes,TCP发送保活探测消息以确定连接是否已断开的次数。默认值为9(次)。
注意:只有设置了SO_KEEPALIVE套接口选项后才会发送保活探测消息。
(18)tcp_keepalive_time,在TCP保活打开的情况下,最后一次数据交换到TCP发送第一个保活探测消息的时间,即允许的持续空闲时间。默认值为7200s(2h)。
相关推荐
### TCP Socket通信实例:心跳机制详解 #### 一、引言 在计算机网络通信中,TCP(Transmission Control Protocol)作为一种面向连接的协议,为数据传输提供了可靠的保障。然而,在实际应用中,网络环境可能会出现...
它可以取三个值:SOL_SOCKET、IPPROTO_IP、IPPROTO_TCP。 * SOL_SOCKET:通用套接字选项。 * IPPROTO_IP:IP 选项。 * IPPROTO_TCP:TCP 选项。 optname 参数 optname 参数指定了控制的方式(选项的名称)。不同...
6. **套接字选项和属性**:Socket类有许多属性和方法用于设置和查询套接字选项,例如NoDelay(TCP_NODELAY)可以禁用Nagle算法以减少延迟,KeepAlive则可以开启心跳检测。 7. **关闭和释放资源**:完成通信后,记得...
#### 三、Keep-Alive机制详解 **TCP Keep-Alive**是一种用于维护长期空闲的TCP连接的技术,其主要目的是检测网络连接的异常中断。TCP Keep-Alive的工作原理如下: 1. **触发条件**:当TCP连接在一定时间内(默认为...
- **SO_KEEPALIVE**:激活心跳检测机制,使系统周期性地向对端发送小数据包,确保连接的持续活动状态。 - **SO_LINGER**:控制Socket关闭行为,特别是决定是否立即释放资源或等待所有已发送数据被接收完毕。 - **SO_...
2. **API详解**:详述Socket编程涉及的函数,如connect(), bind(), listen(), accept(), send(), recv()等的使用方法和参数解析。 3. **实例演示**:提供客户端和服务端的代码示例,展示如何创建Socket,建立连接,...
2. **保持连接**:通过设置Socket选项如SO_KEEPALIVE等,保持连接不被操作系统断开。 3. **心跳包机制**:定时发送心跳包检测连接状态,确保连接有效性。 #### 三、通信过程详解 在SocketDemo项目中,客户端与...
在配置 Redis 时,需要关注多个关键参数来确保其高效稳定地运行。以下是一些重要的 Redis 配置选项及其详细解释: 1. **daemonize**: 默认设置为 `yes`,意味着 Redis 将在后台运行。如果设置为 `no`,Redis 将在...
三、workers.properties 配置详解 配置负载平衡的关键在于 Apache 的 `workers.properties` 文件。以下是一些主要的配置项: 1. **定义 Workers 列表**:通过 `worker.list` 指定参与负载平衡的 worker 名称列表,...
- **含义**: 设置是否启用 TCP 的 `SO_KEEPALIVE` 选项。 - **取值**: 默认值为 `0`。 - **建议**: 在高可用性需求较高的环境下,可以设置非零值。 9. **loglevel** - **含义**: 设置日志记录的级别。 - **...
2. 高级套接字选项:如`SOCKET_REUSEADDR`允许快速重用端口,`SOCKET_KEEPALIVE`开启心跳检测,保持连接活跃。 3. 安全网络通信:Windows提供了SSL/TLS协议支持,通过`SSPI`(Security Support Provider Interface...
### Nginx 配置与安装详解 #### 一、Nginx简介及安装准备 Nginx是一款高性能的HTTP和反向代理Web服务器,它以其稳定性和速度著称,在现代互联网架构中扮演着极其重要的角色。本文档将详细介绍如何在Linux环境下...
通过使用keep-alive机制,可以减少tcp连接建立次数,也意味着可以减少TIME_WAIT状态连接,以此提高性能和提高httpd 服务器的吞吐率(更少的tcp连接意味着更少的系统内核调用,socket的accept()和close()调用)。...
### Redis常用配置项详解 #### 1. include - **解释**:此配置项用于引入其他的配置文件。例如,若存在多个Redis服务器且共享某些通用配置,可将这些通用配置集中存储在一个配置文件中(如`common.conf`),然后...