English 中文(简体)
ServerSocket重用地址是否允许绑定到已绑定的端口?
原标题:ServerSocket reuseAddress allow bind to an already bound port?

使用Netty,我很惊讶,如果我使用reuseAddress选项,它允许ServerSocket绑定到同一地址,而不会引发“已绑定异常”

        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:Userssecmask>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

我是不是错过了什么?怎么回事?

最佳回答

我认为,由于历史原因,Windows允许这样做。这有点安全问题。请参阅http://msdn.microsoft.com/en-us/library/ms740618了解有关相关选项如何交互的一些信息。哪个套接字获得连接是未定义的。也许如果你缩小你正在使用的Windows的版本,你可以缩小响应的范围,尽管这可能只是为了不依赖它。

问题回答

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





相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...

热门标签