sec*_*ask 6 java sockets network-programming tcp
使用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));
Run Code Online (Sandbox Code Playgroud)
我只是认为reuseAddress允许新的套接字重用一个close-wait套接字,但这是不同的.以下是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
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?这是怎么回事?
小智 1
我认为 Windows 允许这样做是因为历史原因。这是一个安全问题。有关所涉及选项如何交互的一些信息,请参阅http://msdn.microsoft.com/en-us/library/ms740618 。哪个套接字获取连接是未定义的。也许如果您缩小正在使用的 Windows 版本的范围,您就可以缩小响应的范围,尽管它可能只是不依赖于它。
| 归档时间: |
|
| 查看次数: |
7136 次 |
| 最近记录: |