gpt4 book ai didi

c - TCP_KEEPIDLE 应该低于 TCP_KEEPINTVL 吗?

转载 作者:行者123 更新时间:2023-12-04 17:54:23 26 4
gpt4 key购买 nike

我正在使用 C 中的套接字(在 Ubuntu 上),我想用 setsockopt 测试一些选项。

当我想测试 Keep Alive 选项时:TCP_KEEPIDLETCP_KEEPINTVL(均来自 IPPROTO_TCP 系列) ,我注意到这个奇怪的行为:

预期行为当我将 TCP_KEEPIDLE 设置为 1(秒)并将 TCP_KEEPINTVL 设置为 3 时,Keep Alive 探测在空闲时间 1 秒后开始发送,然后每 3 秒。

意外行为但是当我将 TCP_KEEPIDLE 设置为 3,并将 TCP_KEEPINTVL 设置为 1 时,探测也是每 3 秒发送一次(而不是 1),所以间隔是空闲时间而不是我专门设置的那个。

是否有任何规范或文档说明 TCP_KEEPIDLE 始终低于或等于 TCP_KEEPINTVL,或者这是一个错误?

谢谢。

最佳答案

以下是我的观察

TCP_KEEPIDLE 在连接空闲时出现。TCP_KEEPIDLE 用于在连接空闲时发送保活探测。在这里,空闲连接意味着没有数据从客户端发送到服务器。因此,如果 TCP_KEEPIDLE 设置为 120 秒,则服务器将在 120 秒后向客户端发送保活探测。

TCP_KEEPINTVL 和 TCP_KEEPCNT 在连接断开时出现。现在,让我们假设连接因网络故障而中断。网络故障可以通过在客户端移除 LAN 电缆来产生。现在,服务器将在“TCP_KEEPINTVL * TCP_KEEPCNT”之后关闭连接。因此,如果 TCP_KEEPINTVL 是 75(这是 linux 上的默认值)并且 TCP_KEEPCNT 是 9(这是 linux 上的默认值),服务器将在 75 秒后发送 9 个探测,并在没有响应时关闭连接。


TCP_KEEPIDLE与TCP_KEEPINTVL的关系

Qnx OS 中,我观察到 TCP_KEEPIDLE 和 TCP_KEEPINTVL 之间没有关系。 TCP_KEEPIDLE 可以低于 TCP_KEEPINTVL。

Linux OS 中,我观察到 TCP_KEEPIDLE 和 TCP_KEEPINTVL 之间存在关系。 TCP_KEEPIDLE 不能低于 TCP_KEEPINTVL。我认为这是一个错误。

关于c - TCP_KEEPIDLE 应该低于 TCP_KEEPINTVL 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41664396/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com