我正在使用streambuf的async_read。但是,我想将读取的数据量限制为4,因此我可以在转到正文之前正确处理标题。
如何使用async_read执行此操作?
答案 0 :(得分:5)
使用两个async_read
操作,其中第一个读取4字节头,第二个读取消息体。您对第一个async_read
的处理程序应该为邮件正文启动async_read
。
asio示例在几个地方使用此技术,serialization示例是一个。我也回答了类似的question,虽然它使用同步读取,但概念是相同的。
答案 1 :(得分:1)
您可以使用transfer_at_least作为CompletionCondition on async_read确保标题可用。
处理完初始标题后,可以处理任何多余的正文数据(或其他标题)。
答案 2 :(得分:0)
boost::asio::transfer_exactly(streambuf.size())
是你需要的。只是尝试使用这样:
boost::asio::async_read(socket_,
buf,boost::asio::transfer_exactly(size_),
boost::bind(callback,
boost::asio::placeholders::error));