当创建Java中的插座:

new Socket(host, port);

在Socket构造会尝试连接到的主持人:在返回前端口的。在Windows中,这几乎立即失败无法访问的主机,但对Linux可能需要长达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重试邻居的状态以及其它的路由器发送RST包也起到一定作用。(它可以在Linux和Windows被配置)

如果Windows上的连接尝试失败immediatelly很可能它是eighter通过路由器RSTed或邻居被认为是不可到达的ARP水平。尝试在Windows上arp -a -v命令来查看无法访问的主机 - 这能很快拒绝

对于Linux你会使用ip neigh列出本地网络上站的可达性状态。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top