boost :: asio :: async_read和boost :: asio :: streambuf

时间:2010-09-22 13:52:41

标签: c++ boost boost-asio streambuf

我正在使用streambuf的async_read。但是,我想将读取的数据量限制为4,因此我可以在转到正文之前正确处理标题。

如何使用async_read执行此操作?

3 个答案:

答案 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));