What is the difference between asio::tcp::socket's async_read_some and async_receive?

后端 未结 3 1177
天命终不由人
天命终不由人 2020-12-30 20:23

What is the difference between:

  • boost::asio::tcp::socket::async_read_some()
  • boost::asio::tcp::socket::async_receive()
  • <
相关标签:
3条回答
  • 2020-12-30 20:48

    I believe the two are essentially identical. The reason they provide both is to provide interfaces similar to both iostreams (which have a read_some member) and sockets (which have a receive).

    As Peter Tseng pointed out, async_receive does also have an overload that accepts socket_base::message_flags, which async_read_some does not.

    0 讨论(0)
  • 2020-12-30 20:49

    Their specification in the networking TR2 proposal (5.7.10.2 basic_stream_socket members) is identical too:

    On async_receive:

    Effects: Calls this->service.async_receive(this->implementation, buffers, 0, handler).

    On async_read_some:

    Effects: Calls this->service.async_receive(this->implementation, buffers, 0, handler).

    So I guess this confirms Jerry's impression.

    0 讨论(0)
  • 2020-12-30 20:57

    Confirming everyone here with two links:

    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

    The code is exactly the same. However async_receive has one overload with message_flags, which notably allows you to specify asio::socket_base::message_peek.

    0 讨论(0)
提交回复
热议问题