c – boost :: asio无法连接到没有WLAN的localhost

前端之家收集整理的这篇文章主要介绍了c – boost :: asio无法连接到没有WLAN的localhost前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的电脑(Surface Pro 2)上,只有一个网络适配器,
它是一个无线LAN适配器.

我参与了一个小型的C项目,它使用boost :: asio来连接
localhost并做它的工作,一切都很好.

但今天我发现如果我从互联网上断开WLAN,
这个程序不起作用.

boost :: asio的解析器会抛出异常:

tcp::resolver::query query("localhost","10127");
tcp::resolver resolver(io_service_);
tcp::resolver::iterator iterator;

try {
    iterator = resolver.resolve(query);
}
catch (boost::system::system_error& e) {
    log(e.what());
}

并且错误消息是:请求的名称有效但没有数据
找到了所请求的类型.

ping到localhost就可以了.

我感到困惑,本地网络程序是否需要互联网?
本地网络程序是否需要LAN适配器?
为什么ping工作正常?

解决方法

我在Linux机器上遇到了同样的问题,并查看了提升asio文档.您只需要在查询构造函数添加一个flag参数:

tcp :: resolver :: query query(“localhost”,“10127”,tcp :: resolver :: query :: canonical_name);

注意:查询的完整范围名称是boost :: asio :: ip :: tcp :: resolver :: query.

发生这种情况是因为此处传递的默认flags参数是boost :: asio :: ip :: tcp :: resolver :: query :: address_configured,这意味着如果非环回IPv4 / IPv6,则调用应仅解析IPv4 / IPv6地址地址是为系统配置的.

猜你在找的C&C++相关文章