Boost.Asio:async_read和async_receive之间的区别

时间:2010-06-05 23:22:48

标签: c++ boost c++11

async_readasync_receive之间有什么区别?

2 个答案:

答案 0 :(得分:10)

async_receive是一个只接收缓冲区的函数,但可能无法收到您要求的金额。 (它将是相等或更少,永远不会更多。)

然而,

async_read将始终收到您要求的金额,因为它声明:

  

此函数用于从流中异步读取一定数量的字节数据。函数调用总是立即返回。异步操作将继续,直到满足下列条件之一:

     
      
  • 提供的缓冲区已满。也就是说,传输的字节数等于缓冲区大小的总和。
  •   
  • 发生错误。
  •   

页面唯一含糊不清的是async_read如果没有得到那么多字节就会做什么,并且连接正常关闭。 (这是否算作“错误”?)这可以通过快速测试来确定。 (async_receive然而,只会给你它所得到的东西。)

答案 1 :(得分:1)

第一个是自由函数,第二个是成员函数。

另一个区别是socket_base::message_flags flags参数。请参阅recv(2)手册页中的可能值。

编辑:

使用async_receive,您需要检查您获得的字节数。如果您想以最大N字节读取,而使用async_read读取正好N字节,请使用它。对不起,认为这与升级文档有点明显。