Повышение. Asio: различие между async_read и async_receive

Каково различие между async_read и async_receive?

12
задан peak 16 January 2016 в 04:56
поделиться

2 ответа

async_receive - это функция, которая просто получает в буфер, но может не получить запрошенную вами сумму. (Оно будет равно или меньше, никогда больше.)

async_read , однако, всегда будет получать запрашиваемую вами сумму, поскольку в нем говорится:

Эта функция используется для асинхронного чтения определенного количества байты данных из потока. Вызов функции всегда немедленно возвращается. Асинхронная операция будет продолжаться до тех пор, пока не будет выполнено одно из следующих условий:

  • Предоставленные буферы заполнены. То есть переданные байты равны сумме размеров буфера.
  • Произошла ошибка.

Единственное, о чем страница немного расплывчата, - это то, что делает async_read , если он не получает столько байтов и соединение закрывается корректно. (Считается ли это «ошибкой»?) Вероятно, это можно определить с помощью быстрой проверки. ( async_receive , однако, просто даст вам то, что у него есть.)

10
ответ дан 2 December 2019 в 22:04
поделиться

Первая - бесплатная функция, вторая - функция-член.

Еще одно отличие - параметр socket_base :: message_flags flags . См. Возможные значения, например, на странице руководства recv (2) .

Изменить:

С помощью async_receive вам нужно проверить, сколько у вас байтов. Используйте его, если вы хотите прочитать с максимальным количеством N байтов , по сравнению с ровно N байтов с async_read . Извините, я подумал, что это было очевидно из документации по ускорению.

1
ответ дан 2 December 2019 в 22:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: