В чем разница между async_read_some asio :: tcp :: socket и async_receive? - PullRequest
29 голосов
/ 10 февраля 2010

В чем разница между:

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

Насколько я могу судить, их документация идентична.

Что я предпочитаю?

Ответы [ 3 ]

22 голосов
/ 10 февраля 2010

Я полагаю, что два по существу идентичны. Причина, по которой они предоставляют оба, заключается в предоставлении интерфейсов, похожих как на iostreams (которые имеют член read_some), так и на сокеты (которые имеют receive).

Как отметил Питер Ценг, async_receive также имеет перегрузку, которая принимает socket_base::message_flags, а async_read_some - нет.

18 голосов
/ 10 февраля 2010

Их спецификация в сетевом предложении TR2 (члены 5.7.10.2 basic_stream_socket) также идентична:

На async_receive:

Эффекты: вызывает this-> service.async_receive (this-> реализация, буфер, 0, обработчик).

На async_read_some:

Эффекты: вызывает this-> service.async_receive (this-> реализация, буфер, 0, обработчик).

Так что, думаю, это подтверждает впечатление Джерри.

2 голосов
/ 21 октября 2016

Подтверждение всех здесь с двумя ссылками:

  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

Код точно такой же. Однако async_receive имеет одну перегрузку с message_flags, которая, в частности, позволяет указывать asio::socket_base::message_peek.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...