c++ - 如何在阅读时获取套接字流的位置

标签 c++ boost asio

当你使用像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/

相关文章:

c++ - 使用 boost::multi_index_container

audio - NAudio Asio 和 ieeefloat 格式

c++ - 如何使用 boost::beast,无阻塞下载文件并带有响应

c++ - 检查 STL 容器无法正常工作

c++ - 求介绍nmake & makefile结构

c++ - 指向指针的 const 问题

c++ - 为什么在所有处理完成后我会收到错误和崩溃代码 0?

c++ - Dbus - 没有收到回复

c++ - 这样的类只能由多个线程设置一次吗?

.net - 单声道多声道播放器