Boost Asio tcp :: resolver: служба не найдена - PullRequest
6 голосов
/ 11 июля 2011

Я пытаюсь создать HTTP-клиент с помощью Boost Asio.Я скопировал пример клиента синхронизации из asio, скомпилировал и запустил.К сожалению, в моих журналах показывается, что Сервис не найден.Когда я проследил код, я обнаружил, что он генерируется из следующего кода:

boost::asio::io_service io_service;
// Get a list of endpoints corresponding to the server name.
tcp::resolver resolver(io_service);
//->if i removed the http, it has no error
tcp::resolver::query query("host.com", "http");
//->This part throws the service not found
tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
tcp::resolver::iterator end;

Кто-нибудь может объяснить, почему он не находит сервис или как решить эту проблему?

1 Ответ

9 голосов
/ 11 июля 2011

Это означает, что ОС не знает, какой номер порта соответствует службе TCP с именем «http».

В Unix-подобных ОС это будет означать, что строка http 80/tcp отсутствует в /etc/services. Я могу воспроизвести ошибку в Linux, комментируя эту строку.

Если ОС не может быть настроена для использования служб, вы можете использовать любую службу "" в распознавателе и указать номер порта явно при создании объекта конечной точки для вызова подключения:

tcp::endpoint connectionEndpoint(endpoint_iterator->address(), 80);
boost::system::error_code ec;
socket.connect(connectionEndpoint, ec);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...