用挂起的连接关闭boost :: asio :: ip :: tcp :: socket

根据boost asio文档,如果我在具有未决异步连接操作的套接字上调用close,则该处理程序将被错误代码“立即”调用。 从文档:

该功能用于关闭套接字。 任何异步的发送,接收或连接操作都会立即被取消,并且会以boost :: asio :: error :: operation_aborted错误结束。

但是处理程序实际上不是立即/同步调用的,当控制权返回到io_service时,它将被异步调用。 如果连接实际上成功了,并且我的处理程序回调已经发布到io_service,那么在我调用close之后,是否有可能我的连接处理程序仍然被调用而没有错误代码?


该文件指出,未完成的操作将立即取消,而不是立即被调用。

连接操作可能已经完成,并且处理程序在io_service进行排队以获得延迟调用,其error_code作为boost::system::errc::success 。 在完成处理程序中,可能需要考虑检查套接字is_open() ,就像在这个答案中所做的那样。 有关此行为的更多详细信息,请参阅此答案。


操作将立即取消,但处理程序不会同步调用。 如果调用close()时“正常”完成处理程序已经在队列中,它肯定会被调用,并且不会得到“operation_aborted”。

链接地址: http://www.djcxy.com/p/62679.html

上一篇: closing a boost::asio::ip::tcp::socket with pending connect

下一篇: boost::asio internal threads