boost :: asio :: ip :: tcp :: socket :: cancel和socket :: close之间有什么不同

xia*_* su 1 c++ sockets boost boost-asio

根据boost文档,在 socket::close()调用时,异步发送,接收或连接操作将立即被取消,并将完成boost::asio::error::operation_aborted错误.

socket::cancel导致所有未完成的异步连接,发送和接收操作立即完成,并且取消操作的处理程序将传递boost::asio::error::operation_aborted错误.

它们之间有什么区别吗?

当我想完成一个套接字连接时,我应该调用哪一个,以便调用它们的回调处理程序时boost::asio::error::operation_aborted出错?

Sam*_*ler 6

它们之间有什么区别吗?

是.该close()方法关闭套接字,而该cancel()方法取消了未完成的异步操作.使用cancel()不关闭套接字.

当我想完成一个套接字连接时,我应该拨打哪一个?

您应该使用cancel()停止任何未完成的异步操作.套接字将被析构函数关闭.