根据boost asio文档,如果我对一个正在进行异步连接操作的套接字调用close,则处理程序将“立即”使用错误代码被调用。从文档中可以看到:
这个函数用于关闭套接字。任何异步发送、接收或连接操作都将立即取消,并且将使用boost::asio::error::operation_aborted错误完成。
但实际上,处理程序并不是立即/同步地被调用的,而是在控制返回到io_service时异步地被调用。如果连接已经成功并且我的处理程序回调已经被发布到io_service中,那么在我调用close后,我的连接处理程序仍然可能会被调用没有错误代码吗?
这个函数用于关闭套接字。任何异步发送、接收或连接操作都将立即取消,并且将使用boost::asio::error::operation_aborted错误完成。
但实际上,处理程序并不是立即/同步地被调用的,而是在控制返回到io_service时异步地被调用。如果连接已经成功并且我的处理程序回调已经被发布到io_service中,那么在我调用close后,我的连接处理程序仍然可能会被调用没有错误代码吗?
cancel()
时,所有异步操作都将被取消,并将设置其处理程序以延迟调用,其中 error 设置为boost::asio::error::operation_aborted error
。 - Tanner Sansbury