Следующий код:
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);
приводит к следующей ошибке при запуске на OS X High Sierra с использованием Xcode 9.1:
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.
Публикация ответа на случай, если другие столкнутся с такой же проблемой и окажутся здесь.
Наконец-то понял это, отчасти благодаря Какой-то программист чувак запрос на пинг хоста, а затем поиск, основанный на том факте, что пинг не удался.
Эта почта https://discussions.apple.com/thread/7707202?start=0&TSTART = 0 утверждает, что по какой-то причине .local hostname остается выключенным, если ни одна из служб общего доступа не активна.
Включение их решило проблему.
Других решений пока нет …