【问题标题】:How to close boost asio server socket with all client sockets connected如何在连接所有客户端套接字的情况下关闭 boost asio 服务器套接字
【发布时间】:2015-03-05 21:43:29
【问题描述】:

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

【问题讨论】:

    标签: c++ boost-asio serversocket


    【解决方案1】:

    执行以下任一操作:

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

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

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

    【讨论】:

    • 我正在查看这个 HTTP Server 1 示例...我的问题是它可以很好地关闭套接字。但是,客户端不需要做任何事情吗?因为还有一个对应于客户端的套接字对象......我们也不必关闭那个套接字吗?
    • 我已在问题中发布了此查询:stackoverflow.com/questions/48267854/… 您可能还想查看该问题以获取更多详细信息。提前致谢 ...
    猜你喜欢
    • 2013-02-17
    • 2023-03-11
    • 1970-01-01
    • 2017-02-25
    • 2015-04-07
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    • 2021-03-31
    相关资源
    最近更新 更多