繁体   English   中英

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

[英]How to view/change socket connection timeout on Linux?

在Java中创建Socket时:

new Socket(host, port);

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

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

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()调用中的“timeout”值可能更安全。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM