使用像 async_read_some 这样的提升功能时,是否可以找到流套接字的偏移量或位置?
例如,当程序在套接字会话中读取大量的json文本时,我会在 handle_read 中使用下一个代码,并且当我读取数据时,我想知道流的确切位置:
socket.async_read_some(
boost::asio::buffer(data, max_length),
boost::bind(&Session::handle_read, this, shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)
);
//socket.get_offset() or socket.get_position()
在文档中我无法找到适合它的解决方案。
最大缓冲区大小为65536字节,但socket使json文本更大。
我无法正确地将缓冲区块添加到正确的位置,因为async在某种洗牌结果中执行它,但我需要以正确的方式执行它。
答案 0 :(得分:0)
如果您想获得接收数据的实际大小,可以在第二个参数的回调函数(Session::handle_read
)内获取其值。
要阅读大流,您可以检查处理程序中的boost::asio::error::eof
错误代码
if (!err)
{
// Continue reading remaining data until EOF.
}
else if (err != boost::asio::error::eof)
{
std::cout << "Error: " << err << "\n";
}