Windows中build立的连接的TCP超时

我有以下情况:

  • 在客户端计算机上的应用程序(Firebird DB客户端)在端口3050上打开到服务器的TCP连接
  • 客户端应用程序崩溃,应用程序终止
  • 服务器上的netstat仍然显示端口3050上的TCP连接ESTABLISHED到客户端的IP地址。
  • closures客户端
  • 服务器上的netstat仍然显示端口3050上的TCP连接ESTABLISHED到客户端的IP地址。
  • 等了几分钟
  • 服务器上的netstat仍然显示端口3050上的TCP连接ESTABLISHED到客户端的IP地址。

Windows下build立的连接是否有超时(本例中为Win8.1)? 我可以改变这个超时吗?

我发现这一点 ,但这似乎并没有回答我build立连接的问题。

默认情况下,build立的TCP连接不会超时( 但由于硬件限制,可能会这样做 )。

应用程序可以使用TCP keepalive机制来检查断开的连接。 在火鸟(> 1.5)TCP保持活动已启用 。

Keepalive“超时”必须在服务器上设置。 Windows中的默认TCP存活时间间隔为2小时(但build议为5分钟) 。 它可以在HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\KeepAliveTimeregistry项中设置。

从上面的链接更多细节:

一个失败的客户端连接将在下列时间间隔后closures: KEEPALIVE_TIME+ ( KEEPALIVE_PROBES+1)* KEEPALIVE_INTERVAL

在Windows中具有以下相应的registry值:

 KEEPALIVE_TIME = KeepAliveTime (default: 7200 seconds) KEEPALIVE_INTERVAL = KeepAliveInterval (default: 1 second) KEEPALIVE_PROBES = TCPMaxDataRetransmissions (default: 5) 

但:

保持活动部分默认每两小时发送一次[…]。 即使启用,其他上层协议(如NetBIOS)也会发送自己的保活值。 如果上层协议使用的keepalive时间间隔小于TCP keepalive时间间隔,则永不发送TCP keepalive值。 例如,TCP / IP上的NetBIOS会话每隔60分钟发送一次NetBIOS存活请求。 因此,从不使用为NetBIOS会话启用的TCP保持活动值。

TCP规范没有超时或保活机制。 有一些registry项可以设置为configurationTCP保持活动,但是由实际的应用程序来使用保持活动。 看到这个问题的答案:

在Windows系统上启用全系统TCP保持活动