独立 asio async_connect 未触发绑定处理程序
Standalone asio async_connect not firing off bound handler
我遵循了 boost asio 实现提供的 documentation and examples,但在将我的客户端连接到服务器后没有任何运气。无论成功还是失败,处理程序都不会被调用。我已验证服务器正在接收并接受来自客户端的连接,但客户端没有任何反应表明成功。
void ssl_writer::main_thread() {
using namespace std::placeholders;
using namespace asio::ip;
tcp::resolver resolver(io_context);
tcp::resolver::query query("192.168.170.115", "8591");
tcp::resolver::iterator endpointer_iterator = resolver.resolve(query);
io_context.run();
std::cout << "connecting...";
asio::async_connect(socket.lowest_layer(), endpointer_iterator, std::bind(&ssl_writer::handle_connect, this, _1));
}
//...
void ssl_writer::handle_connect(const std::error_code& error) {
if (!error) {
std::cout << "connected!";
}
else {
std::cout << "failed!";
}
}
io_context::run()
处理处理程序,直到没有要处理的处理程序为止。由于您还没有 运行 任何异步调用,所以没有处理程序并且 run
returns 立即。
在这个简单的示例中,您需要在 async_connect
之后调用 io_context::run()
,在更复杂的程序中,您通常会创建一个工作线程来调用 io_context::run()
并创建一个 boost::asio::executor_work_guard
以防止 io_context
运行ning 失业。
我遵循了 boost asio 实现提供的 documentation and examples,但在将我的客户端连接到服务器后没有任何运气。无论成功还是失败,处理程序都不会被调用。我已验证服务器正在接收并接受来自客户端的连接,但客户端没有任何反应表明成功。
void ssl_writer::main_thread() {
using namespace std::placeholders;
using namespace asio::ip;
tcp::resolver resolver(io_context);
tcp::resolver::query query("192.168.170.115", "8591");
tcp::resolver::iterator endpointer_iterator = resolver.resolve(query);
io_context.run();
std::cout << "connecting...";
asio::async_connect(socket.lowest_layer(), endpointer_iterator, std::bind(&ssl_writer::handle_connect, this, _1));
}
//...
void ssl_writer::handle_connect(const std::error_code& error) {
if (!error) {
std::cout << "connected!";
}
else {
std::cout << "failed!";
}
}
io_context::run()
处理处理程序,直到没有要处理的处理程序为止。由于您还没有 运行 任何异步调用,所以没有处理程序并且 run
returns 立即。
在这个简单的示例中,您需要在 async_connect
之后调用 io_context::run()
,在更复杂的程序中,您通常会创建一个工作线程来调用 io_context::run()
并创建一个 boost::asio::executor_work_guard
以防止 io_context
运行ning 失业。