Асинхронно устанавливает соединение сокетов, пробуя каждую конечную точку в последовательности.
template<
typename Protocol,
typename SocketService,
typename Iterator,
typename ComposedConnectHandler>
void-or-deduced async_connect(
basic_socket< Protocol, SocketService > & s,
Iterator begin,
ComposedConnectHandler handler);
Эта функция пытается подключить сокет к одной из последовательности конечных точек. Он делает это путем повторных вызовов функции элемента сокета<async_connect
>, один раз для каждой конечной точки в последовательности, пока соединение не будет успешно установлено.
- s
Сокет должен быть подключен. Если розетка уже открыта, она будет закрыта.
- begin
Итератор, указывающий на начало последовательности конечных точек.
- handler
-
Обработчик должен быть вызван, когда операция подключения завершится. Копии будут сделаны из обработчика по мере необходимости. Функциональная подпись обработчика должна быть:
void handler(
const boost::system::error_code& error,
Iterator iterator
);
Независимо от того, выполняется ли асинхронная операция немедленно или нет, обработчик не будет вызываться из этой функции. Запрос обработчика будет выполнен способом, эквивалентным использованию<boost::asio::io_service::post()
>.
Эта перегрузка предполагает, что построенный по умолчанию объект типа<Iterator
>представляет собой конец последовательности. Это верное предположение для типов итераторов, таких как<boost::asio::ip::tcp::resolver::iterator
>.
tcp::resolver r(io_service);
tcp::resolver::query q("host", "service");
tcp::socket s(io_service);
r.async_resolve(q, resolve_handler);
void resolve_handler(
const boost::system::error_code& ec,
tcp::resolver::iterator i)
{
if (!ec)
{
boost::asio::async_connect(s, i, connect_handler);
}
}
void connect_handler(
const boost::system::error_code& ec,
tcp::resolver::iterator i)
{
}