独立asio async_connect不触发绑定处理程序

时间:2019-04-16 16:59:45

标签: c++ ssl asio

我遵循了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!";
    }
}

1 个答案:

答案 0 :(得分:1)

io_context::run()处理处理程序,直到没有更多处理程序要处理为止。由于您尚未运行任何异步调用,因此没有处理程序,run立即返回。

在这个简单的示例中,您需要在io_context::run()之后调用async_connect,在更复杂的程序中,通常会创建一个工作线程来调用io_context::run()并创建{{1}的实例},以防止boost::asio::executor_work_guard用尽。