根据 boost asio 文档,如果我在具有异步连接操作挂起的套接字上调用 close,处理程序将被“立即”调用并带有错误代码。从文档:
This function is used to close the socket. Any asynchronous send, receive or connect operations will be cancelled immediately, and will complete with the boost::asio::error::operation_aborted error.
但是处理程序实际上并不是立即/同步调用的,而是在控制权返回到 io_service 时异步调用的。是否有可能我的连接处理程序仍然被调用 没有 如果连接实际成功并且我的处理程序回调已发布到 io_service,则调用 close 后出现错误代码?
最佳答案
文档指出,未完成的操作将立即取消,而不是立即调用。
有可能连接操作已经完成,处理程序在 io_service
中排队用于延迟调用及其 error_code
如 boost::system::errc::success
.可能值得考虑检查套接字 is_open()
在完成处理程序中,如在 this 中所做的那样回答。有关此行为的更多详细信息,请参阅 this回答。
关于boost - 关闭带有挂起连接的 boost::asio::ip::tcp::socket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16715487/