Java ServerSocket 中 setReuseAddress 的目的是什么?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/23123395/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 20:52:43  来源:igfitidea点击:

What is the purpose of setReuseAddress in ServerSocket?

javasockets

提问by Chaitanya

I have a simple logic Java that checks if a port is already in use or not:

我有一个简单的逻辑 Java 来检查端口是否已在使用中:

public static boolean isPortInUse(int port)
  {
    ServerSocket socket = null;
    try {
      socket = new ServerSocket(port);
      socket.setReuseAddress(true);
    } catch (Exception e) {
        return true;
    }
    finally
    {
      if (socket != null) {
        try {
          socket.close();
        } catch (Exception e) {
          return true;
        }
      }
    }
    return false;
  }

I am new to socket programming so I am not able to understand what is the use of the method "setReuseAddress"here. I have gone through this linkbut I am not getting clarity the purpose of it.

我是套接字编程的新手,所以我无法理解"setReuseAddress"这里方法的用途。我已经浏览了这个链接,但我没有弄清楚它的目的。

采纳答案by Koitoer

This explanation is coming from TCP mechanism involving some low level socket properties and protocols, basically there is an option called SO_REUSEADDR that you define when you are creating the socket, using the method setReuseAddress()enable or disable this behavior.

这个解释来自涉及一些低级套接字属性和协议的 TCP 机制,基本上有一个名为 SO_REUSEADDR 的选项,您在创建套接字时定义它,使用方法setReuseAddress()启用或禁用此行为。

The current explanation is very well defined here, take a look there. Also APIhave very good explanation

当前的解释在这里定义得很好,看看那里。此外API有很好的解释

Just take as a configuration parameter that can be modified using that method.

只需将其作为可以使用该方法修改的配置参数即可。

Enabling SO_REUSEADDR prior to binding the socket using bind(SocketAddress) allows the socket to be bound even though a previous connection is in a timeout state.

在使用 bind(SocketAddress) 绑定套接字之前启用 SO_REUSEADDR 允许绑定套接字,即使先前的连接处于超时状态。