当你使用像async_read_some这样的boost功能时,是否可以找到流套接字的偏移量或位置?
例如,当程序在套接字 session 中读取大量 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 字节,但套接字获取的 json 文本更大。
我无法在正确的位置正确附加缓冲区 block ,因为异步会在某种洗牌结果中执行此操作,但我需要以正确的方式执行此操作。
最佳答案
如果你想得到接收数据的实际大小,可以在第二个参数的回调函数(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";
}
关于c++ - 如何在阅读时获取套接字流的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50137635/