【发布时间】:2010-09-22 13:52:40
【问题描述】:
我将 async_read 与 streambuf 一起使用。但是,我想将读取的数据量限制为4,这样我就可以在进入正文之前正确处理标题。
我怎样才能使用 async_read 做到这一点?
【问题讨论】:
标签: c++ boost boost-asio streambuf
我将 async_read 与 streambuf 一起使用。但是,我想将读取的数据量限制为4,这样我就可以在进入正文之前正确处理标题。
我怎样才能使用 async_read 做到这一点?
【问题讨论】:
标签: c++ boost boost-asio streambuf
使用两个async_read 操作,第一个读取一个 4 字节的标头,第二个读取消息正文。您对第一个 async_read 的处理程序应该为消息正文启动 async_read。
asio 示例在几个地方使用了这种技术,serialization 示例就是其中之一。我也回答了一个类似的question,虽然它使用的是同步读取,但概念是一样的。
【讨论】:
您可以使用transfer_at_least 作为CompletionCondition on async_read 来保证标头可用。
一旦您处理了初始标头,就可以处理任何多余的正文数据(或进一步的标头)。
【讨论】:
boost::asio::transfer_exactly(streambuf.size())
是你所需要的。试着像这样使用:
boost::asio::async_read(socket_,
buf,boost::asio::transfer_exactly(size_),
boost::bind(callback,
boost::asio::placeholders::error));
【讨论】: