某些 boost::asio 异步函数是否将处理程序连接到操作,以便处理程序被触发一次?



假设我们有一个处理程序H和一个接受器A。假设我们做A.async_accept(some_slave_socket, H).然后有人想要连接,所以H被调用了。它已被执行。然后其他人想要连接。H是第二次打电话还是我们不得不为此再次打电话async_accept

处理程序只会被调用一次。否则,它会损坏您的套接字,因为它使用该套接字的引用。不过,您可以做的是调用处理程序中的async_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);
// ...
}

最新更新