提升asio套接字是否有适当的RAII清理

时间:2014-02-11 19:00:02

标签: c++ boost-asio raii

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

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

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

因此,如果我的套接字超出范围,我是否需要在其上调用shutdown()close(),否则它将自动完成?

1 个答案:

答案 0 :(得分:4)

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

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