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

NoS*_*tAl 7 c++ raii boost-asio

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

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

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

所以,如果我有插座走出去的范围,我需要打电话shutdown()close()上它,或者它会自动完成?

Tan*_*ury 4

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

当 IO 对象(例如套接字)被销毁时,其析构函数将调用IO 对象的服务,并传入IO 对象的服务将destroy()在其上操作的实例。implementation_type要求SocketService声明destroy()将隐式取消异步操作,就像通过调用close()服务上的 一样,该服务具有返回 false 的后置条件is_open()。此外,该服务close()将导致未完成的异步操作尽快完成。已取消操作的处理程序将传递错误代码boost::asio::error::operation_aborted,并安排在io_service. io_service如果这些处理程序是从处理事件循环的线程调用的,或者被io_service销毁,则这些处理程序将从 中删除。