Как разрешить хост (только) с помощью Boost.Asio? - PullRequest
7 голосов
/ 04 октября 2009

В соответствии с документацией из boost::asio::ip::tcp::resolver::query для разрешения хоста он должен получить услугу а также.

Что если я хочу разрешить хост без связи с портом? Как мне вообще это сделать? Должен Я указываю фиктивный порт?

1 Ответ

7 голосов
/ 04 октября 2009

В один пост в списке рассылки буста кто-то, похоже, сделал это так (скопировал, переформатировал, сервисный номер изменился, больше ничего):

namespace bai = boost::asio::ip;
bai::tcp::endpoint ep(bai::address_v4(0xD155AB64), 0); // 209.85.171.100:0
boost::asio::io_service ios;
bai::tcp::resolver resolver(ios);
bai::tcp::resolver::iterator iter = resolver.resolve(ep);
bai::tcp::resolver::iterator end;
while (iter != end)
{
  std::cerr << (*iter).host_name() << std::endl; // cg-in-f100.google.com
  ++iter;
} 

Как вы правильно сказали, здесь служба все еще передается, но шаг через код Boost.Asio показал это (в resolver_service.hpp я использую довольно старую версию 1.36):

// First try resolving with the service name. If that fails try resolving
// but allow the service to be returned as a number.

Итак, просто идите с 0, и он должен делать то, что вы хотите.

...