Подтвердить что ты не робот

В чем разница между asio:: tcp:: socket async_read_some и async_receive?

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

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

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

Что я должен предпочесть?

4b9b3361

Ответ 1

Их спецификация в сетевом предложении 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

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

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

Ответ 3

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

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