[英]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.