我有以下情况:
Windows 下建立的连接是否有超时(本例中为 Win8.1)?我可以更改此超时吗?
我发现了这个,但这似乎并没有回答我关于已建立连接的问题。
默认情况下,已建立的 TCP 连接不会超时(但可能会因为硬件限制而超时)。
应用程序可以使用 TCP keepalive 机制来检查断开的连接。在 Firebird (>1.5) 中启用 TCP keepalive。
必须在服务器上设置保活“超时”。Windows 中默认的 TCP keepalive 时间间隔为 2 小时(但建议为 5 分钟)。它可以在HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\KeepAliveTime注册表项中设置。
来自以上链接的更多详细信息:
失败的客户端连接将在以下时间间隔后关闭:
KEEPALIVE_TIME+ ( KEEPALIVE_PROBES+1)* KEEPALIVE_INTERVAL
在 Windows 中使用以下相应的注册表值:
KEEPALIVE_TIME = KeepAliveTime (default: 7200 seconds)
KEEPALIVE_INTERVAL = KeepAliveInterval (default: 1 second)
KEEPALIVE_PROBES = TCPMaxDataRetransmissions (default: 5)
Run Code Online (Sandbox Code Playgroud)
但:
默认情况下,每两小时发送一个 keepalive 段 [...]。即使启用,其他上层协议(如 NetBIOS)也会发送自己的 keepalive 值。如果上层协议使用的keepalive 时间间隔小于TCP 的keepalive 时间间隔,则不会发送TCP 的keepalive 值。例如,TCP/IP 上的 NetBIOS 会话每 60 分钟发送一次 NetBIOS keepalive 请求。因此,从不使用为 NetBIOS 会话启用的 TCP keepalive 值。
TCP 规范没有超时或保活机制。可以设置一些注册表项来配置 TCP keepalive,但使用 keepalive 取决于实际应用程序。请看这个问题的答案:
在 Windows 系统上启用系统范围的 TCP keepalive