繁体   English   中英

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

[英]Boost.Asio socket destructor closes connection?

boost::asio::ip::tcp::socket的析构函数到底是做什么的? 我不知道,即使在浏览Boost文档和源代码之后,如果我需要使用它

socket->shutdown(boost::asio::ip::tcp::socket::shutdown_both);
socket->close();

在打电话之前

delete socket;

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

当一个插座被破坏,它将作为-如果由封闭socket.close(ec)的插座的破坏期间。

I / O对象(如socket )派生自basic_io_object basic_io_object析构函数中 ,将在I / O对象的I / O服务上调用destroy() ,传入I / O对象服务将在其上运行的implementation_type实例。 在socket的情况下,将在满足SocketService类型要求的类型上调用destroy() ,关闭底层套接字。 在下面的文档中, 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)

不,你不需要关闭它。 虽然这样做可能更干净,但如果要报告协议关闭周围的任何错误。

析构函数只是/出现/是空的,这是Modern C ++的一个好兆头:

答案已经跳过了shutdown()的问题。 从close()文档,“关于正常关闭连接套接字的可移植行为,在关闭套接字之前调用shutdown()”。

如果删除套接字是隐式关闭,则在删除之前似乎仍然建议调用shutdown()。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM