是否对提升 asio 插槽进行适当的 RAII 清理
Do boost asio sockets have proper RAII cleanup
我尝试查看源代码,但我无法浏览那么多模板代码。基本上:这是文档所说的(对于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 对象(如套接字)被销毁时,其析构函数将在 IO 对象的服务上调用destroy()
,传入 IO 对象的服务将在其上运行的implementation_type
的实例。 SocketService
要求指出,destroy()
将通过调用服务上的close()
来隐式取消异步操作,该服务具有is_open()
返回 false 的后置条件。 此外,该服务的close()
将导致未完成的异步操作尽快完成。 已取消操作的处理程序将被传递错误代码boost::asio::error::operation_aborted
,并计划在io_service
内延迟调用。 如果从处理事件循环的线程调用这些处理程序或销毁io_service
,则会从io_service
中删除这些处理程序。
相关文章:
- 具有瞬态资源的RAII类
- rcpp函数中的清理时间很长
- 使用RAII在给定次数的迭代后重新分配资源
- 为什么 ulimit -v 在 Clang 的地址清理器下不起作用?
- LeetCode 1:两和 - 地址清理器:堆缓冲区溢出地址
- 即发即弃 std::线程对象清理自身
- 内存清理程序报告全局对象构造中未初始化值的使用
- 在文件夹迭代上实现 RAII
- 在 RAII 构造中修改 RVO 值是否安全?
- 并行块(线程清理器)之外的 OpenMP 中的争用条件;误报?
- 为什么我得到以下代码地址清理器:未知地址错误的SEGV
- RAII 等效于 FIFO 发布订单
- 应用地址清理器后,免费无效指针消失
- 清理"QSettings"注册表项的最佳方法(Windows上的Qt 5)
- 变体 - 分配新值时是否清理旧值?
- 我将如何清理这些 If 语句?
- 当无法进行RAII时,如何在C++中"try/finally"?
- 如何处理 RAII 中的资源等待
- 我可以将c ++清理器仅应用于程序的一部分而不是第三方库吗?
- 是否对提升 asio 插槽进行适当的 RAII 清理