如何在阅读

时间:2018-05-02 14:54:39

标签: c++ boost asio

使用像 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在某种洗牌结果中执行它,但我需要以正确的方式执行它。

1 个答案:

答案 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";
    }