async_read和async_receive之间有什么区别?
答案 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字节,请使用它。对不起,认为这与升级文档有点明显。