boost::asio::ip::tcp::socket
的析构函数具体做了什么?即使我看遍了 Boost 文档和源代码,也无法确定是否需要使用它。
socket->shutdown(boost::asio::ip::tcp::socket::shutdown_both);
socket->close();
在调用之前
delete socket;
在使用完套接字后,我需要手动关闭套接字吗?还是析构函数会处理这个问题?
boost::asio::ip::tcp::socket
的析构函数具体做了什么?即使我看遍了 Boost 文档和源代码,也无法确定是否需要使用它。
socket->shutdown(boost::asio::ip::tcp::socket::shutdown_both);
socket->close();
在调用之前
delete socket;
在使用完套接字后,我需要手动关闭套接字吗?还是析构函数会处理这个问题?
socket.close(ec)
关闭。
输入/输出对象,例如socket
,继承自basic_io_object
。在basic_io_object
析构函数中,将在I/O对象的I/O服务上调用destroy()
,并传入一个implementation_type
实例,该实例将操作I/O对象的服务。在socket的情况下,将在满足SocketService类型要求的类型上调用destroy()
,关闭底层socket。在下面的文档中,a
是socket服务类的实例,b
是socket服务类的implementation_type
的实例:
a.destroy(b)
:[...] 隐式地取消异步操作,就像调用
a.close(b, ec)
一样。
a.close(b, ec)
:如果
a.is_open()
为真,则尽快完成所有未完成的异步操作。对于已取消的操作,处理程序应传递错误代码error::operation_aborted
。后置条件:
!a.is_open(b)
。
不需要关闭它。但是,如果您想报告与协议关闭相关的任何错误,关闭它可能更加清晰。
析构函数只是“看起来”为空,这是现代 C++ 的一个好迹象:
socket->shutdown(boost::asio::ip::tcp::socket::shutdown_both); socket->close();
- amanuel2
basic_io_object
中进行处理。 - Tanner Sansbury