gpt4 book ai didi

networking - TCP Socket 无连接超时

转载 作者:可可西里 更新时间:2023-11-01 02:28:47 26 4
gpt4 key购买 nike

我打开一个 TCP 套接字并将其连接到网络上其他地方的另一个套接字。然后我可以成功发送和接收数据。我有一个定时器,每秒向套接字发送一些东西。

然后我通过强行断开连接(在这种情况下拔出以太网电缆)粗暴地中断了连接。我的套接字仍在报告它正在每秒成功地写出数据。这将持续大约 1 小时 30 分钟,最终出现写入错误。

什么指定了一个套接字最终接受另一端消失的超时?是操作系统 (Ubuntu 11.04),是来自 TCP/IP 规范,还是套接字配置选项?

最佳答案

虽然会中断通信,但拔出网络电缆不会断开 TCP 连接(1)。您可以重新插入电缆,一旦建立 IP 连接,所有备份数据就会移动。这就是使 TCP 可靠的原因,即使在蜂窝网络上也是如此。

当 TCP 发送数据时,它需要一个 ACK​​ 作为回复。如果在一段时间内没有收到,它会重新传输数据并再次等待。它在传输之间等待的时间通常呈指数增长。

经过一定次数的重传或一定时间后没有 ACK,TCP 将认为连接“断开”。多少次或多长时间取决于您的操作系统及其配置,但通常会在几分钟内超时。

来自 Linux 的 tcp.7 man page :

   tcp_retries2 (integer; default: 15; since Linux 2.2)
The maximum number of times a TCP packet is retransmitted in
established state before giving up. The default value is 15, which
corresponds to a duration of approximately between 13 to 30 minutes,
depending on the retransmission timeout. The RFC 1122 specified
minimum limit of 100 seconds is typically deemed too short.

这可能是您想要调整的值,以更改检测连接是否消失所需的时间。

(1) 也有异常(exception)。操作系统在注意到电缆被移除后,可以通知上层所有连接都应被视为“断开”。

关于networking - TCP Socket 无连接超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13085676/

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