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

在Java中创buildSocket时:

new Socket(host, port); 

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

我知道,如果我有创build套接字的控制权,我可以这样做:

 Socket s = new Socket(); s.bind(..); s.connect(.., timeout); 

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

谢谢

我想你想/proc/sys/net/ipv4/tcp_syn_retries 。 默认值通常是5或6,大约3分钟。

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

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

这是BTW不完全正确,Linux和Windows的行为在这里不同。 除了最初的SYN重试(可以在Linux和Windows上配置)之外,邻居状态以及发送RST数据包的其他路由器也起作用。

如果Windows上的连接尝试立即失败,则很可能是由路由器RST更严重,或者在ARP级别上将邻居识别为无法访问。 尝试Windows上的arp -a -v命令,查看无法访问的主机 – 这些主机很快就会被拒绝。

对于Linux,您可以使用ip neigh来列出本地网络上工作站的可访问性状态。

这是我的理解,这取决于系统的TCP / IP默认超时(240秒默认情况下)…一个选项是尝试调整这些,但这可能会影响在同一台机器上依赖超时值的任何其他程序。 在这种情况下,简单地降低Java connect()调用中的“超时”值可能会更安全。