【发布时间】:2011-05-11 22:13:08
【问题描述】:
当没有网络连接时,我正在尝试使我的联网应用程序在本地工作(服务器和客户端都在同一台计算机上运行)。这似乎偶尔会“正常工作”,但大多数时候我最终会得到:
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 标志(默认设置)会阻止解析返回。我仍在发布此问题,希望对其他人有所帮助,但我已经解决了我的问题。
现在我用
tcp::resolver::query query(host, PORT, boost::asio::ip::resolver_query_base::numeric_service);
虽然其他人可能不想要我使用的标志,但如果他们确实想要查找服务名称(我只是使用端口号)。
【问题讨论】:
标签: linux networking boost-asio