如何检查 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。
我想检查 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。