gpt4 book ai didi

c++ - boost asio 套接字是否有适当的 RAII 清理

转载 作者:可可西里 更新时间:2023-11-01 18:37:48 24 4
gpt4 key购买 nike

我尝试查看源代码,但无法浏览那么多模板代码。基本上:这是文档所说的(对于 close()):

Remarks    
For portable behaviour with respect to graceful
closure of a connected socket, call shutdown() before closing the socket.

我可以手动完成,但如果可能的话,依靠 RAII 会更好。

因此,如果套接字超出范围,我是否需要对其调用 shutdown()close(),或者它会自动完成?

最佳答案

可以依靠套接字使用 RAII 执行适当的清理。

当一个 IO 对象,比如 socket,被销毁时,它的 destructor将在 IO 对象的服务上调用 destroy(),传入 IO 对象的服务将在其上运行的 implementation_type 实例。 SocketService要求声明 destroy() 将通过调用服务上的 close() 隐式取消异步操作as-if,它有一个后置条件is_open() 返回 false。此外,服务的 close() 将导致未完成的异步操作尽快完成。取消操作的处理程序将传递错误代码 boost::asio::error::operation_aborted,并安排在 io_service 中延迟调用。如果这些处理程序是从处理事件循环的线程调用的,或者 io_servicedestroyed,则这些处理程序将从 io_service 中删除.

关于c++ - boost asio 套接字是否有适当的 RAII 清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21710709/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com