我正在使用与协同程序的boost asio从tcp socket获取一些数据。在这些文档中显示的exmaples中,示例如下所示
http::async_read(socket, buffer, request, yield[ec]);
但是如何在这种情况下获得传输的字节数。
不使用协同程序,我们可以绑定回调函数。
void onReadDataComplete(boost::system::error_code ec, std::size_t bytes_transferred)
但目前还不是很清楚如何用coroutine做同样的事情。
仔细阅读这个link。
你的启动函数async_read
可以用handler
或yield
调用。处理程序签名必须是
void handler(boost::system::error_code ec, result_type result);
其中result
表示读取了多少字节。当你用async_read
代替yield
调用handler
时,async_read
返回result_type
,即size_t
- 这意味着读取字节的计数器。所以你只需要检查async_read
的返回值。