假设我们有一个处理程序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);
// ...
}