2011-05-17 49 views
2

我有这段代码。我如何将我的方法resolve_handler与预期的迭代器和错误参数绑定在一起?这是否是打破连接逻辑的正确方法?使用boost :: asio将resolve_handler绑定到解析器async_resolve

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; 
} 

回答

2

有在Boost.Asio的教程实例,例如,从这个HTTP async client

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

+0

它的工作,不知道为什么我卡在这里,谢谢(看来我不能接受或关闭qn)。 – 2011-05-17 11:39:03

相关问题