В чем разница между asio:: tcp::async_read_some сокета и async_receive?

StackOverflow https://stackoverflow.com/questions/2238166

  •  19-09-2019
  •  | 
  •  

Вопрос

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

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

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

Что мне следует предпочесть?

Это было полезно?

Решение

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

В async_receive:

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

В async_read_some:

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

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

Другие советы

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

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

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

  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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top