如何在Linux上查看/更改套接字连接超时?

Kev*_*vin 9 java sockets linux timeout connect

在Java中创建Socket时:

new Socket(host, port);
Run Code Online (Sandbox Code Playgroud)

Socket构造函数将在返回之前尝试连接到host:port.在Windows上,对于无法访问的主机,这几乎立即失败,但对于Linux,Socket最多可能需要5分钟才能超时.

我知道如果我可以控制创建套接字,我可以这样做:

Socket s = new Socket();
s.bind(..);
s.connect(.., timeout);
Run Code Online (Sandbox Code Playgroud)

但我宁愿让操作系统使用合理的默认值.有没有办法在Linux上更改此设置?

谢谢

Duc*_*uck 9

我想你想要的/proc/sys/net/ipv4/tcp_syn_retries.默认值通常为5或6,大约3分钟.

请注意,这些是系统范围的.

  • 间隔由称为rtoMin,rtoMax和rtoInitial的值控制,其中rto代表往返超时.基本上,它表示数据包进行往返所需的时间.因此,如果TCP发送第一个消息,它将等待rtoInitial时间.如果它没有得到响应,它将加倍rto(并添加一些抖动值),然后再试一次.这将持续到maxRetries.目前的rto值永远不会超过rtoMax. (4认同)

aka*_*okd 5

我建议不要更改操作系统设置,因为它可能会意外影响其他应用程序。该Socket.setSoTimeout()方法可能也会对您有所帮助。

  • 我可以问一下投反对票的原因,以便我从中吸取教训吗? (2认同)
  • 我认为 SO_TIMEOUT 适用于读取但不适用于连接,所以这可能就是原因。但目前我似乎无法找到对此的验证。 (2认同)