尝试绑定已绑定的TCP端口应引发异常(“bind:Address in in use”异常)。
它确实发生在Linux下。但在Windows下,没有异常被提出..
可能是因为在windows下它试图绑定到任何接口吗?但是在Linux中它会尝试绑定到所有这些并且如果不是所有这些都被绑定会引发异常吗?
以下是代码段:
try {
tcp::endpoint endpoint(tcp::v4(), 8081);
tcp::acceptor acceptor(io_service);
acceptor.open(endpoint.protocol());
acceptor.set_option(tcp::acceptor::reuse_address(true));
acceptor.set_option(tcp::acceptor::enable_connection_aborted(true));
acceptor.bind(endpoint);
acceptor.listen(1024)
catch(std::exception &e) {
cout << e.what() << endl;
}
答案 0 :(得分:2)
在Windows中,选项tcp::acceptor::reuse_address
相当于调用setsockopt
并指定SO_REUSEADDR
。这特别允许将多个套接字绑定到地址,即使它正在使用中。请参阅MSDN文档here.
Win32(SO_EXCLUSIVEADDRUSE
)中有相应的选项documented here。这篇文章详细介绍了在Win32平台上使用SO_REUSEADDR
的一些潜在缺点。