Boost.Asio socket析构函数关闭连接?

owa*_*der 7 c++ sockets boost network-programming boost-asio

破坏者究竟做了boost::asio::ip::tcp::socket什么?我不知道,即使在浏览Boost文档和源代码之后,如果我需要使用它

socket->shutdown(boost::asio::ip::tcp::socket::shutdown_both);
socket->close();
Run Code Online (Sandbox Code Playgroud)

在打电话之前

delete socket;
Run Code Online (Sandbox Code Playgroud)

我是否需要手动关闭套接字,或者析构函数是否处理此问题?

Tan*_*ury 7

当一个插座被破坏,它将被关闭作为-如果由socket.close(ec)插座的销毁过程中.

I/O对象,例如socket派生自basic_io_object.在basic_io_object析构函数中,destroy()将在I/O对象的I/O服务上调用,传入implementation_typeI/O对象服务将在其上运行的实例.在socket的情况下,destroy()将在满足SocketService类型要求的类型上调用,关闭底层套接字.在下面的文档中,a是套接字服务类b的实例,并且是套接字服务类的实例implementation_type:

a.destroy(b):

[...]隐式取消异步操作,就像通过调用一样a.close(b, ec).

a.close(b, ec):

如果a.is_open()为true,则会导致任何未完成的异步操作尽快完成.取消操作的处理程序应传递错误代码error::operation_aborted.

发布:!a.is_open(b).