尝试绑定已绑定的 TCP 端口应引发异常(“绑定:地址已在使用中”异常)。
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;
}
在 Windows 中,该选项tcp::acceptor::reuse_address
相当于调用setsockopt
并指定SO_REUSEADDR
。这特别允许多个套接字绑定到一个地址,即使该地址正在使用中。请参阅 MSDN 文档here. http://msdn.microsoft.com/en-us/library/ms740476%28v=vs.85%29.aspx
Win32中有一个相应的选项(SO_EXCLUSIVEADDRUSE
) 这是记录在这里 http://msdn.microsoft.com/en-us/library/ms740618。这篇文章详细介绍了简单使用的一些潜在缺点SO_REUSEADDR
在 Win32 平台上。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)