我使用下面的代码打开Boost Asio接受器。我希望当我打开程序的第二个实例时,新实例将无法绑定到已使用的端口8080.但我发现,实际上从未抛出异常。我怎样才能使程序不会绑定到已经使用的端口?
这是在Windows 7计算机上运行。
boost::shared_ptr<asio_ip::tcp::acceptor> acceptor;
try {
acceptor.reset(new asio_ip::tcp::acceptor(io_service, asio_ip::tcp::endpoint(asio_ip::tcp::v4(), 8080)));
}
catch (...) {
acceptor.reset(new asio_ip::tcp::acceptor(io_service, asio_ip::tcp::endpoint(asio_ip::tcp::v4(), 0)));
}
答案 0 :(得分:0)
您可能需要明确禁用reuse_address
,因为我不确定Windows平台上是否默认启用此功能。这可以按如下方式完成:
boost::asio::ip::tcp::acceptor acceptor(io_service);
...
boost::asio::socket_base::reuse_address option(false);
acceptor.set_option(option);