Boost Asio udp 解析器返回错误的端点迭代器

Boost Asio udp resolver returning faulty endpoint iterator

本文关键字:错误 端点 迭代器 返回 Asio udp Boost      更新时间:2023-10-16

启动程序时,我需要检索运行它的机器的本地(LAN)地址。我这样做的方式如下:

try {
    asio::io_service ioService;
    asio::udp::resolver resolver(ioService);
    asio::udp::query lanQuery(asio::udp::v4(), asio::ip::host_name(), "");
    boost::system::error_code error;
    auto endpointIter = resolver.resolve(lanQuery, error);
    if (error || endpointIter == endpoint_iterator()) {
        //TREATS ERROR
        return;
    }
    //BUILD ENDPOINT
    asio::udp::endpoint endpoint(*endpointIter); //CRASHES HERE FOR SOME PPL
catch (...) {//TREATS ERROR}

这适用于 90% 的用户,但对于少数人来说,它在最后一行崩溃。Idk 该怎么办,因为我测试了返回的迭代器、错误代码,并且还尝试了整个代码......捕获 (...) 块。

我什至无法处理异常,程序只是崩溃,仅此而已。我正在使用 Boost 1.64,但这个问题永远发生。

我没有注意到这种崩溃的任何模式,对于拥有各种硬件/软件/操作系统的随机人来说,它似乎崩溃了。

我做错了什么吗?有没有人看到这段代码会崩溃的原因?

将 endpointIter 与默认构造的端点进行比较是否正确?在我的源代码中,我与默认构造的迭代器进行比较:

auto endpointIter = resolver.resolve(lanQuery, error);
decltype(endpointIter) end;
for(;endpointIter != end; ++endpointIter)
{
  asio::udp::endpoint endpoint(*endpointIter);
  ...
}