asio :: tcp :: socket的async_read_some和async_receive有什么区别?

时间:2010-02-10 15:51:27

标签: c++ boost-asio

有什么区别:

  • boost::asio::tcp::socket::async_read_some()
  • boost::asio::tcp::socket::async_receive()

据我所知,他们的文件是相同的。

我更喜欢哪一个?

3 个答案:

答案 0 :(得分:22)

我相信这两者基本相同。他们提供两者的原因是提供类似于iostream(具有read_some成员)和套接字(具有receive)的接口。

正如Peter Tseng所指出的那样,async_receive也有一个接受socket_base::message_flags的重载,async_read_some没有。

答案 1 :(得分:18)

他们在networking TR2 proposal(5.7.10.2 basic_stream_socket成员)中的规范也是相同的:

在async_receive上:

  

效果:调用this-> service.async_receive(this-> implementation,buffers,0,handler)。

在async_read_some上:

  

效果:调用this-> service.async_receive(this-> implementation,buffers,0,handler)。

所以我猜这证实了杰瑞的印象。

答案 2 :(得分:2)

通过两个链接确认每个人:

  1. https://github.com/boostorg/asio/blob/36eef63a9cf8ae609716d76ccb3906ff9769d53a/include/boost/asio/basic_stream_socket.hpp#L558
  2. https://github.com/boostorg/asio/blob/36eef63a9cf8ae609716d76ccb3906ff9769d53a/include/boost/asio/basic_stream_socket.hpp#L834
  3. 代码完全相同。但是async_receive有一个带有message_flags的重载,特别允许您指定asio::socket_base::message_peek