独立 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 失业。