【发布时间】:2018-04-29 18:27:22
【问题描述】:
以下代码:
using boost::asio::ip::tcp;
std::string ipAddress;
boost::asio::io_service io_service;
tcp::resolver resolver(io_service);
tcp::resolver::query query(boost::asio::ip::host_name(), "");
tcp::resolver::iterator iter = resolver.resolve(query);
使用 Xcode 9.1 在 OS X High Sierra 上运行时会导致以下错误:
std::runtime_error: resolve: Host not found (authoritative)
resolver 的值为:
(boost::asio::ip::tcp::resolver) resolver = {
boost::asio::basic_io_object<boost::asio::ip::resolver_service<boost::asio::ip::tcp>, false> = {
service = 0x00000001023159a0
implementation = nullptr {
__ptr_ = 0x0000000000000000
__cntrl_ = 0x00000001023156c0
}
}
}
而query的值为:
(boost::asio::ip::basic_resolver<boost::asio::ip::tcp, boost::asio::ip::resolver_service<boost::asio::ip::tcp> >::query) query = {
hints_ = {
ai_flags = 1024
ai_family = 0
ai_socktype = 1
ai_protocol = 6
ai_addrlen = 0
ai_canonname = 0x0000000000000000
ai_addr = 0x0000000000000000
ai_next = 0x0000000000000000
}
host_name_ = "iMac.local"
service_name_ = ""
}
resolve 函数如下所示:
iterator resolve(const query& q)
{
boost::system::error_code ec;
iterator i = this->service.resolve(this->implementation, q, ec);
boost::asio::detail::throw_error(ec, "resolve");
return i;
}
所以我可以看到调用resolve 和resolver.implementation 是nullptr 是导致问题的原因。但是,我不知道为什么它是nullptr。
这在运行 OS X Yosemite 或 El Capitan 的不同机器上不是问题。
【问题讨论】:
-
boost::asio::ip::host_name()返回什么?它是有效的主机名还是 IP 地址?如果你想连接到本地主机,为什么不简单地使用"127.0.0.1"? -
返回
iMac.local -
如果我只想知道机器的IP地址是什么?
-
您的本地地址总是 127.0.0.1。本地环回接口的标准地址。
-
你试过
pinghost_name返回的主机吗?也许它只是没有正确设置?
标签: c++ macos boost boost-asio resolve