增加 TCP 套接字超时与手动重试套接字连接之间有区别吗?

Posted

技术标签:

【中文标题】增加 TCP 套接字超时与手动重试套接字连接之间有区别吗?【英文标题】:Is there a difference between increasing a TCP socket timeout vs manually retrying the socket connection? 【发布时间】:2018-04-10 21:53:42 【问题描述】:

我继承了尝试建立 TCP 套接字以诊断设备与某些 URL 的连接的代码。在某些情况下,TCP 套接字会在我们设置的超时阈值之后超时。我的问题是手动重试套接字连接与仅增加超时阈值之间是否有区别?

请记住,这是一种用于正在安装和配置的设备上的诊断工具,因此它们的网络配置可能会在套接字连接过程中发生变化。 TCP 套接字会考虑网络更改(如网关、DNS 或本地 IP)并在超时之前建立连接(假设网络更改在套接字正常超时之前完成)还是有必要建立新的套接字连接?或者增加超时与手动重试套接字连接之间没有真正的区别?

【问题讨论】:

【参考方案1】:

超时可能由于多种原因而发生,但想象下一种情况:

    数据包已发送 您的主机和设备之间发生了一些奇怪的故障,数据包完全丢失(丢弃) 你会超时

现在,您增加了超时时间 - 这不会改变情况

如果你有重试 - 新的数据包将在超时的情况下发送,如果失败是暂时的,那么你最终会建立连接

结论 - 应该将超时设置为一个合理但非常小的值,并且您应该进行多次重试,同样是一个合理的数字。

【讨论】:

这是一个如此明显的答案,我不知道为什么我没有想到这一点。感谢您的澄清!

以上是关于增加 TCP 套接字超时与手动重试套接字连接之间有区别吗?的主要内容,如果未能解决你的问题,请参考以下文章

TCP Socket 无连接超时

如何设置socket的Connect超时

ActionScript 3.0 套接字无法重新连接

Gsutil 错误“捕获套接字错误,重试:超时”

nodejd tcp超时时间设置

如何配置套接字连接超时