gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:42:31 24 4
gpt4 key购买 nike

启动我的程序后,我需要检索运行它的机器的本地 (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 (...) block 将整个代码括起来。

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

我没有注意到这次崩溃的任何模式,它似乎会随机出现在拥有各种硬件/软件/操作系统的人身上。

我做错了什么吗?有谁知道这段代码会崩溃的原因吗?

最佳答案

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

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

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

关于c++ - Boost Asio udp 解析器返回错误的端点迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46854339/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com