是否可以安全地假设如果我对async_read进行两次调用,那么第二次调用只会在第一次调用后处理?

时间:2015-02-16 03:01:29

标签: c++ boost-asio

我通过网络发送一些数据,每个数据都有一个包含两个内容的标题:

  1. 数据类型
  2. 数据的其余部分的长度。
  3. 我将数据类型读入一个变量,将长度读入另一个变量,从而调用两个async_read。

    我知道我可以链接async_reads并且一切都应该正常工作,即首先读取消息类型,当它被读取时,在其async_read处理程序中,调用async_read获取数据长度。

    但是,如果我不进行此类链接并且只执行async_read(数据类型),该怎么办? async_read(数据长度);只有在第一个完成后,Boost才会处理第二个async_read()吗?

    在同一个tcp套接字和同一个io_service对象上调用async_reads。

1 个答案:

答案 0 :(得分:2)

不,这不是一个安全的假设。 async_read()实现为对async_read_some()的多次调用,因此读取最终可能会被交错。