如何检查 return 类型的 boost asio async_read_some、async_write_some

How to check return type of boost asio async_read_some, async_write_some

我想检查 async_read_some、async_write_some 或任何其他异步函数是否成功。我知道处理程序中可用的 boost::asio::placeholders::error 参数。但是异步调用本身没有 return 类型吗? 我阅读了 completion_condition,但不知道如何使用它。任何简单的代码示例都会有所帮助。

                mSock.async_read_some(
                        boost::asio::buffer(mI8Data, MAX_BUFFER_LENGTH),
                        boost::bind(&ConnectionHandler::HandleRead,
                            shared_from_this(), 
                            boost::asio::placeholders::error,
                        boost::asio::placeholders::bytes_transferred));

我基本上想要一些东西来告诉我 async_read_some 调用是否遇到任何问题。

异步操作通常不会失败:它们是启动函数。没有要检查的结果代码。

但是,所有 Asio IO 对象和免费启动函数都具有通用的完成令牌接口。 return 类型实际上取决于该标记:您会看到 return 类型是一些基于 async_result<>.

的“复杂”计算

这意味着您可以使用其他异步方式并且结果类型可以改变。例如:

size_t s.async_read_some(buf, boost::asio::use_future).get();

如果适用,将为 error_code 抛出 system_error。