相关疑难解决方法(0)

Boost Asio的主机名解析如何在Linux上运行?是否可以使用NSS?

我正在尝试在没有网络连接的情况下使我的网络应用程序在本地工作(服务器和客户端都在同一台计算机上运行).这似乎偶尔"正常工作",但大多数时候我最终会:

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
Run Code Online (Sandbox Code Playgroud)

我目前使用的代码是:

  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);
Run Code Online (Sandbox Code Playgroud)

我很确定我已经将问题缩小到ip :: basic_resolver :: resolve,但我无法弄清楚它是如何在Linux上实现的,或者我可能想要使用的其他内容. 似乎是同一个问题.似乎只是不执行任何查找,只使用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
Run Code Online (Sandbox Code Playgroud)

它没有工作. 在我写这篇文章的过程中,我发现了我的错误,如果loopback设备是唯一一个带地址的设备,则address_configured标志(默认设置)会阻止resolve返回.我仍然发布这个问题,希望它可以帮助别人,但我已经解决了我的问题.

现在我用

tcp::resolver::query query(host, PORT, boost::asio::ip::resolver_query_base::numeric_service);
Run Code Online (Sandbox Code Playgroud)

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

linux networking boost-asio

8
推荐指数
2
解决办法
7289
查看次数

标签 统计

boost-asio ×1

linux ×1

networking ×1