Что делает boost :: asio :: ip :: tcp :: resolver :: iterator? - PullRequest
14 голосов
/ 24 февраля 2011

Я начинаю с boost asio-программирования на C ++, и, просматривая примеры, я просто не могу понять, что делает boost::asio::ip::tcp::resolver::iterator.

код:

boost::asio::io_service io_service;

tcp::resolver resolver(io_service);
tcp::resolver::query query(argv[1]);
tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
tcp::resolver::iterator end;

tcp::socket socket(io_service);
boost::system::error_code error = boost::asio::error::host_not_found;
while (error && endpoint_iterator != end)
{
  socket.close();
  socket.connect(*endpoint_iterator++, error);
}

Пожалуйста, помогите мне и извините, если мой вопрос не содержит достаточно информации.

1 Ответ

20 голосов
/ 24 февраля 2011

boost::asio::ip::tcp::resolver::iterator перебирает список адресов хоста, который вы указали (хосты могут иметь несколько адресов).

Как std :: string :: iterator выполняет итерацию по своим символам, boost :: asio :: ip :: tcp :: resolver :: iterator выполняет итерацию по списку адресов.

Следующий код:

while (error && endpoint_iterator != end)
{
  socket.close();
  socket.connect(*endpoint_iterator++, error);
}

пытается установить соединение с каждой конечной точкой, пока она не преуспеет или не исчерпает конечные точки (спасибо за исправление Eugen Constantin Dinca).

...