我的代码在单个线程中使用 boost::asio 和 io_service 来执行各种套接字操作。所有操作都是异步的,每个处理程序都依赖于boost::system::error_code
(尤其是boost::asio::error::operation_aborted
)来确定操作的结果。
在我更改逻辑以建立多个并发连接并选择最快的连接之前,它一直运行良好。也就是说,当第一个async_read_some
处理程序触发时,我会取消其他套接字(关闭、关闭 - 一切)并继续当前的套接字。在 95% 的情况下,调用其他套接字的读取处理程序时会出现 operation_aborted 错误。但是有时,这些读取处理程序被调用而没有错误,告诉我它们已成功接收 N 个字节。
但是 socket::cancel() 的文档指出:
该函数使所有未完成的异步连接、发送和接收操作立即完成,取消操作的处理程序将传递
boost::asio::error::operation_aborted
错误。
所以,问题是:我真的可以依赖operation_aborted
生产代码中的错误吗?如果可以,它是来自 boost 1.46.1 的 Asio 中的错误吗?如果我不能,是否有任何关于此的官方文件?