启动程序后,我需要检索运行该程序的计算机的本地(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%的用户有效,但对于少数人来说,它在最后一行崩溃了。
因为我测试了返回的迭代器,错误代码,并且还用try ... catch(...)块将整个代码括起来,所以该怎么做。

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

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

难道我做错了什么?有人看到该代码崩溃的原因吗?

最佳答案

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

auto endpointIter = resolver.resolve(lanQuery, error);
decltype(endpointIter) end;

for(;endpointIter != end; ++endpointIter)
{
  asio::udp::endpoint endpoint(*endpointIter);
  ...
}

10-08 20:05