如何在连接所有客户端套接字的情况下关闭boost asio服务器套接字

时间:2013-02-22 15:15:31

标签: c++ boost-asio serversocket

我使用boost:asio::ip::tcp::acceptor在我的应用中创建服务器套接字。我使用close函数关闭此接受器套接字,而不是stop中的io_service函数,但所有连接的客户端套接字仅在我的应用关闭时关闭。我该如何解决这个问题? 谢谢!

1 个答案:

答案 0 :(得分:7)

执行以下任一操作:

  • 在套接字上调用socket::close()
  • 销毁套接字。有关在销毁期间如何关闭套接字的详细信息,请参阅this答案。

io_service::stop()仅停止处理事件循环。工作仍然可以发布到io_service,现有工作将保留在io_service中。因此,应用程序必须在它希望关闭的每个套接字上调用socket::close()。要获得便携式优雅闭包,请在致电close()之前致电socket::shutdown()

值得花点时间来回顾Boost.Asio的HTTP Server 1示例。它使用connection_manager来关闭所有连接。