Boost.Asio: разница между async_read и async_receive - PullRequest
11 голосов
/ 06 июня 2010

В чем разница между async_read и async_receive ?

Ответы [ 2 ]

10 голосов
/ 06 июня 2010

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

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

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

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

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

1 голос
/ 06 июня 2010

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

Другим отличием является параметр socket_base::message_flags flags. Смотрите возможные значения, например, на справочной странице recv(2).

Edit:

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

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