【发布时间】:2018-05-02 14:54:38
【问题描述】:
在使用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 字节,但 socket 获取的 json 文本更大。
我无法在正确的位置正确附加缓冲区块,因为异步在某种随机播放结果中执行此操作,但我需要以正确的方式执行此操作。
【问题讨论】:
-
流的位置是什么意思?您可能想获取新收到的数据实际大小吗?
-
我不想知道读取数据的实际大小。当您通过套接字发送大大小的字符串并以异步方式读取它时,您不知道读取流数据的确切位置。当您想通过使用异步读取来附加数据时,您没有得到正确的文件,您将获得数据的随机文本。因为异步读取是在某种随机处理中完成的。
-
如果我的理解正确,查看
boost::asio::error::eof会有所帮助。