【问题标题】:How to set the keep alive interval for winsock如何设置winsock的保持活动间隔
【发布时间】:2011-11-18 01:47:09
【问题描述】:

我正在使用winsock 和TCP。 我已将KeepAlive 选项设置如下

int aliveToggle = 1;
setsockopt(mySocket,SOL_SOCKET,SO_KEEPALIVE,(char*)&aliveToggle, sizeof(aliveToggle));

但是如何指定 Keep aLive 时间和间隔呢?

我正在使用在 Windows 7 上运行的 VC++。

【问题讨论】:

  • 在 Linux 下,有 TCP_KEEPIDLE、TCP_KEEPCNT 和 TCP_KEEPINTVL 选项可以让您控制保活行为……但在 Windows 下的 AFAIK,您几乎不走运。希望我错了,有人会在这里发布一个方法,如果我错过了一个我也想知道的方法:)

标签: sockets visual-c++


【解决方案1】:

【讨论】:

【解决方案2】:

\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Tcpip\Parameters 项下的两个每个接口的注册表设置控制 TCP/IP 保持活动的行为:

KeepAliveTime 值指定 TCP 连接空闲多长时间,没有流量,在 TCP 发送保持活动数据包之前。默认值为 7,200,000 毫秒 (ms) 或 2 小时。

KeepAliveInterval 值表示在发送 keep-alive 之后,在重复 keep-alive 之前等待响应的毫秒数。如果未收到响应,则 TCP/IP 堆栈会在此时间间隔继续发送保持活动状态,直到收到响应或堆栈达到 TCPMaxDataRetransmissions 注册表项中指定的数据包重试限制。 KeepAliveInterval 默认为 1 秒 (1000 .

默认情况下禁用 TCP 保持连接,但 Windows Sockets 应用程序可以使用 setsockopt 函数在每个连接的基础上启用它们。

注意如果开发人员选择在特定连接上使用 TCP 保持活动消息,则这些消息的时间由上述注册表值指定。不能对不同的 keep-alive 请求使用不同的时间。

【讨论】:

猜你喜欢
  • 2011-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-11
  • 2013-03-26
  • 2018-03-16
  • 2015-09-28
相关资源
最近更新 更多