【发布时间】:2016-03-15 01:07:12
【问题描述】:
我正在尝试检查我电脑上的端口是否可用。但是这段代码在 acceptor.listen(); 之后会崩溃。崩溃堆栈跟踪停止于:
detail/impl/win_iocp_socket_service_base.ipp
我的代码是:
try {
boost::asio::io_service io_service;
boost::asio::ip::tcp::acceptor acceptor(io_service);
boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::address::from_string("127.0.0.1"), port);
acceptor.open(endpoint.protocol());
acceptor.set_option(boost::asio::ip::tcp::acceptor::reuse_address(false));
acceptor.bind(endpoint);
acceptor.listen();
}
catch (...) {
// port busy
}
如何使用 boost 来检查这一点,或者我的代码中的问题在哪里?
UPD1:我尝试了 here 的以下代码:
bool port_in_use(unsigned short port) {
using namespace boost::asio;
using ip::tcp;
io_service svc;
tcp::acceptor a(svc);
boost::system::error_code ec;
a.open(tcp::v4(), ec) || a.bind({ tcp::v4(), port }, ec);
return ec == error::address_in_use;
}
但函数执行后,我的程序仍然在原地崩溃。
【问题讨论】:
-
不,退出函数时崩溃仍然存在
-
这是什么意思,@user2123079?你尝试了什么?什么功能?
-
看来这个功能是不相关的。 (怎么可能是“在同一个地方”呢?那个更新中不存在“同一个地方”。)在其他地方寻找 UB 的案例。使其成为 SSCCE。另见 Nobody Writes Testcases Anymore 和 Solve your problem by almost asking a question on Stackoverflow
标签: c++ boost boost-asio