代码之家  ›  专栏  ›  技术社区  ›  Kevin

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

  •  9
  • Kevin  · 技术社区  · 16 年前

    在Java中创建套接字时:

    new Socket(host, port);
    

    套接字构造函数将尝试连接到 主机:端口 返回前。在Windows上,对于无法访问的主机,这几乎是立即失败的,但是对于Linux,套接字超时可能需要5分钟。

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

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

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

    谢谢

    4 回复  |  直到 16 年前
        1
  •  7
  •   Vishesh Handa    10 年前

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

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

        2
  •  4
  •   akarnokd    16 年前

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

        3
  •  2
  •   eckes    14 年前

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

    如果Windows上的连接尝试立即失败,很可能是路由器对其进行了八分之一的限制,或者邻居在ARP级别上被认为是不可访问的。试试 arp -a -v 在Windows上查看无法访问的主机的命令-这些主机会被快速拒绝。

    对于Linux,您将使用 ip neigh 列出本地网络上站点的可达性状态。

        4
  •  0
  •   DreadPirateShawn    16 年前

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