我有这个代码。如何将我的方法resolve_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;
}
答案 0 :(得分: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