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

Bre*_*own 2 c++ serversocket boost-asio

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

Tan*_*ury 8

执行以下任一操作:

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

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

可能值得花些时间来查看Boost.Asio的HTTP Server 1示例.它使用a connection_manager来关闭所有连接.