C++ 是否有某个boost::asio async函数将处理程序连接到操作,以便该处理程序被触发一次?

C++ 是否有某个boost::asio async函数将处理程序连接到操作,以便该处理程序被触发一次?,c++,boost-asio,C++,Boost Asio,假设我们有一个处理程序H和一个接受程序a。假设我们做了A.async\u accept(一些从插槽,H)。然后有人想连接,所以调用了H。它已经被执行了。然后其他人想要连接。是否第二次调用了H,或者为此我们必须再次调用async\u accept?处理程序将只调用一次。否则,它将损坏您的套接字,因为它使用了对该套接字的引用。不过,您可以做的是在处理程序中调用async\u accept,以开始新的循环: tcp::acceptor acceptor; void accept_handler(co

假设我们有一个处理程序
H
和一个接受程序
a
。假设我们做了
A.async\u accept(一些从插槽,H)
。然后有人想连接,所以调用了
H
。它已经被执行了。然后其他人想要连接。是否第二次调用了
H
,或者为此我们必须再次调用
async\u accept

处理程序将只调用一次。否则,它将损坏您的套接字,因为它使用了对该套接字的引用。不过,您可以做的是在处理程序中调用
async\u accept
,以开始新的循环:

tcp::acceptor acceptor;

void accept_handler(const asio::error_code& error, asio::ip::tcp::socket peer)
{
    if (!error)
    {
        my_connection_container.push_back(std::move(peer));
    }

    acceptor.async_accept(accept_handler);
}

int main()
{
    acceptor = tcp:acceptor(my_io_context);
    acceptor.async_accept(accept_handler);
    // ...
}

处理程序将只被调用一次。否则,它将损坏您的套接字,因为它使用了对该套接字的引用。不过,您可以做的是在处理程序中调用
async\u accept
,以开始新的循环:

tcp::acceptor acceptor;

void accept_handler(const asio::error_code& error, asio::ip::tcp::socket peer)
{
    if (!error)
    {
        my_connection_container.push_back(std::move(peer));
    }

    acceptor.async_accept(accept_handler);
}

int main()
{
    acceptor = tcp:acceptor(my_io_context);
    acceptor.async_accept(accept_handler);
    // ...
}