gpt4 book ai didi

linux - Boost Asio 的主机名解析如何在 Linux 上工作?是否可以使用 NSS?

转载 作者:IT王子 更新时间:2023-10-29 00:18:35 25 4
gpt4 key购买 nike

当没有网络连接时,我试图让我的联网应用程序在本地工作(服务器和客户端都在同一台计算机上运行)。这似乎偶尔“有效”,但大多数时候我最终会得到:

terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >'
what(): Host not found (authoritative)
Aborted

我目前使用的代码是:

  tcp::resolver::query query(host, PORT);
tcp::resolver::iterator endpointIterator = resolver.resolve(query);
tcp::resolver::iterator end;

boost::system::error_code error = boost::asio::error::host_not_found;
while(error && endpointIterator != end)
{
mySocket.close();
mySocket.connect(*endpointIterator++, error);
}
if(error)
throw boost::system::system_error(error);

我很确定我已经将问题缩小到 ip::basic_resolver::resolve ,但我无法弄清楚它是如何在 Linux 上实现的,或者我可能还想使用什么。 This 似乎是同一个问题。似乎根本不执行任何查找,只使用 127.0.0.1 应该可以,但是当我尝试用

替换查询行时
tcp::resolver::query query(host, PORT, boost::asio::ip::resolver_query_base::address_configured | boost::asio::ip::resolver_query_base::numeric_host

没用。 当我写这篇文章时,我发现了我的错误,如果环回设备是唯一一个有地址的设备,address_configured 标志(默认设置)会阻止 resolve 返回。我仍然发布这个问题,希望它能帮助其他人,但我已经解决了我的问题。

现在我用

tcp::resolver::query query(host, PORT, boost::asio::ip::resolver_query_base::numeric_service);

如果其他人确实想要查找服务名称(我只是使用端口号),他们可能不想要我正在使用的标志。

最佳答案

问题是查询的构造函数默认设置了 address_configured 标志,如果环回设备是唯一具有地址的设备,它不会返回地址。通过将标志设置为 0 或除 address_configured 之外的任何其他内容,问题就解决了。这是我现在成功使用的内容:

tcp::resolver::query query(host, PORT, boost::asio::ip::resolver_query_base::numeric_service);

希望这对以后遇到此问题的任何人有所帮助。

关于linux - Boost Asio 的主机名解析如何在 Linux 上工作?是否可以使用 NSS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5971242/

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