【问题标题】:is io_service_.stop() only required when io_service_.run() previously calledio_service_.stop() 仅在之前调用 io_service_.run() 时才需要
【发布时间】:2014-07-04 12:34:18
【问题描述】:

我使用 boost asio 和同步套接字实现了一个 tcp 客户端。

我想知道是否必须在(或之前?)关闭/关闭我的套接字之后调用 io_service_.stop()?

【问题讨论】:

  • 您有多个插座吗?他们都共享一个io_service吗?如果您在一个套接字断开连接时停止服务,您认为其他套接字事件处理会发生什么?另一方面,如果您只有一个套接字(例如,在与服务器的单个连接的客户端程序中),在套接字关闭后程序会继续吗?是否可以连接到另一台(或同一台)服务器?如果以后必须重新启动它,为什么要停止服务呢?

标签: c++ sockets boost-asio


【解决方案1】:

当没有工作要做时,它会自行停止,一旦所有的套接字等都被关闭(除非你使用work 对象来保持它活着)。如果您希望它在异步操作仍处于挂起状态时停止,请仅调用 stop

【讨论】:

    【解决方案2】:

    很简单:

    如果您不再需要您的socket 并且socket 仍处于打开状态:

    • 关闭socket

    如果您不再需要 io_service 并且 io_service 仍在工作:

    • 停止io_service

    如果您一直将io_service 用于一个socket,并且您不再需要socket

    • 关闭socket
    • 如果io_service 仍在工作,则停止io_service

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-07
      • 2021-06-06
      • 2016-11-11
      • 1970-01-01
      • 1970-01-01
      • 2017-08-03
      • 1970-01-01
      • 2015-09-12
      相关资源
      最近更新 更多