如何才能使程序不会绑定到已在使用的端口?

时间:2014-07-21 14:27:49

标签: c++ windows boost boost-asio

我使用下面的代码打开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)));
}

1 个答案:

答案 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);