使用 boost::asio 将resolve_handler绑定到解析器async_resolve
Bind resolve_handler to resolver async_resolve using boost::asio
我有这个代码。如何将方法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;
}
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
)
相关文章:
- 为什么std::async使用同一个线程运行函数
- 为什么可以将左值传递给"std::async",即使它引用了右值
- 使用用户定义的参数调用future/async并调用类方法
- 使用 std::async 时死锁,将来作为成员
- 为什么我不能将引用作为 std::async 的函数参数传递
- std::async from std::async in windows xp
- Google Cloud Pubsub Async Streaming API in C++
- -fno-unwind-tables 和 -fno-async-unwind-tables 不起作用 NDK clang
- std::async 如何工作:为什么它会调用这么多次复制/移动?
- 使用提升 asio 时出现"resolve: Host not found (authoritative)"异常
- std::async 不会立即调用
- async中没有匹配的函数(模板中未解析的类型)
- OpenCV 和 C++:"Can't resolve variable 'Mat`"
- std::async 如果线程是从 DLL 创建的,则会阻止进程退出?
- 使用 std::vector<std::future<int>> 和 std::async 启动几个线程时中止
- 在Visual Studio中,与std::async一起使用时不调用"thread_local"变量"析构函数,这是一个错误吗?
- 可能的 std::async 实现错误 Windows
- 类型字符串::长度()。我得到了"Unable to resolve identifier length"
- 为什么使用线程池时嵌套调用 boost::async 会阻塞?
- C++从 std::async 函数读取命名空间中的全局变量标志