Привязать resol_handler к распознавателю async_resolve с помощью boost :: asio - PullRequest
2 голосов
/ 17 мая 2011

У меня есть этот код.Как я могу связать свой метод resol_handler с ожидаемыми параметрами итератора и ошибки?Это правильный способ сломать логику соединения?

void FileClient::start() 
{ 
    try {
        boost::asio::ip::tcp::resolver::query query("ip", "port");
        resolver_.async_resolve(query, boost::bind(
            &FileClient::resolve_handler, this
        ));
    }
    catch (std::exception& e)
    {
        std::cerr << "Exception: " << e.what() << "\n";
    }
}

void FileClient::resolve_handler(const boost::system::error_code &_error,
                                 boost::asio::ip::tcp::resolver::iterator _it)
{ 
    if (!_error) 
        socket_.async_connect(*_it, boost::bind(
            &FileClient::connect_handler, this, boost::asio::placeholders::error
        ));
    else 
        std::cerr << "resolve_handler error: " << _error << std::endl; 
}

1 Ответ

2 голосов
/ 17 мая 2011

В руководствах boost.asio есть примеры, например, из этого асинхронного клиента HTTP

tcp::resolver::query query(server, "http");
    resolver_.async_resolve(query,
        boost::bind(&client::handle_resolve, this,
          boost::asio::placeholders::error,
          boost::asio::placeholders::iterator));

...

void handle_resolve(const boost::system::error_code& err,
                    tcp::resolver::iterator endpoint_iterator)
{
    if (!err)
    {
        // Attempt a connection to the first endpoint in the list. Each endpoint
        // will be tried until we successfully establish a connection.
         tcp::endpoint endpoint = *endpoint_iterator;
         socket_.async_connect(endpoint,
                         boost::bind(&client::handle_connect, this,
                         boost::asio::placeholders::error, ++endpoint_iterator));
    }
    else
    {
        std::cout << "Error: " << err.message() << "\n";
    }
}

(их handle_connect продолжает увеличиваться endpoint_iterator по мере необходимости)

...