如果我使用close而不取消,则存在一些问题.
该close函数可以关闭套接字,并通过返回boost::asio::error::operation_aborted错误来停止任何未完成的异步操作.
我为什么要用cancel而不是close?
我担心一些异步操作是否正在执行,cancel无法取消它,是吗?
就像asio::ip::tcp::resolve::cancel,我尝试多次取消resolve_handler后调用async_resolve,但resolve_handler总是返回没有boost::asio::error::operation_aborted错误.
我认为resolve_handler正在执行?
是?
根据boost文档,在 socket::close()调用时,异步发送,接收或连接操作将立即被取消,并将完成boost::asio::error::operation_aborted错误.
socket::cancel导致所有未完成的异步连接,发送和接收操作立即完成,并且取消操作的处理程序将传递boost::asio::error::operation_aborted错误.
它们之间有什么区别吗?
当我想完成一个套接字连接时,我应该调用哪一个,以便调用它们的回调处理程序时boost::asio::error::operation_aborted出错?