首页 > 解决方案 > 读取时如何获取套接字流的位置

问题描述

当您使用像async_read_some这样的 boost 功能时,是否可以找到流套接字的偏移量或位置?

例如,当程序在套接字会话中读取大量 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 文本更大。

我无法在正确的位置正确附加缓冲区块,因为异步在某种随机播放结果中执行此操作,但我需要以正确的方式执行此操作。

标签: c++boostasio

解决方案


如果要获取接收到的数据的实际大小,可以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";
    }

推荐阅读