java - ServerSocket reuseAddress 允许绑定(bind)到一个已经绑定(bind)的端口?

标签 java sockets network-programming tcp

使用 Netty 时,令我惊讶的是,如果我使用 reuseAddress 选项,它允许 ServerSocket 绑定(bind)到同一地址而不会引发“已经绑定(bind)异常”

        ServerBootstrap bootstrap = new ServerBootstrap(
                new NioServerSocketChannelFactory(Executors
                        .newCachedThreadPool(), Executors.newCachedThreadPool()));
        bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
            @Override
            public ChannelPipeline getPipeline() throws Exception {
                ChannelPipeline p = pipeline();
                p.addLast("handler", new DummyHandler());
                return p;
            }
        });
        bootstrap.setOption("reuseAddress", true);
        bootstrap.bind(new InetSocketAddress(2000));
        bootstrap.bind(new InetSocketAddress(2000));

我只是认为 reuseAddress 允许一个新的套接字重用一个关闭等待的套接字,但这是不同的。下面是一个netstat命令的结果

  C:\Users\secmask>netstat -a -n|grep 2000
  TCP    0.0.0.0:2000           0.0.0.0:0              LISTENING
  TCP    0.0.0.0:2000           0.0.0.0:0              LISTENING

我错过了什么吗?怎么回事?

最佳答案

您看到的是 reuseAddress 应该做的事情。多个套接字可以同时绑定(bind)到同一个 IP/端口,无论它们的状态如何。

关于java - ServerSocket reuseAddress 允许绑定(bind)到一个已经绑定(bind)的端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5043674/

相关文章:

java - 如何检测 ScrollPane 何时完成滚动

java - Android中如何处理透明listview

java - python - 什么是最大字节相当于 java Byte.MAX_VALUE

c - 为accept()返回的客户端套接字设置sockopt

ios - React Native 包加载缓慢或根本不加载

sockets - 设置事件模式 'once'后,套接字服务器无法接受数据

java - Android AsyncTask 和网络问题

C++ 网络编程库

java - 在 List 的每个索引上创建 ArrayList

linux - 在没有服务器调用 'connect' 的情况下,套接字上的 'accept' 调用能否成功返回?