Есть ли способ получить количество байтов, переданных в Boost Asio с сопрограммами - PullRequest
0 голосов
/ 28 апреля 2019

Я использую Boost Asio с сопрограммой, чтобы получить некоторые данные из сокета TCP. В примерах, показанных в этом документе, пример выглядит как

http::async_read(socket, buffer, request, yield[ec]);

Но как я могу получить количество байтов, переданных в этом случае.

Без использования сопрограммы мы можем связать функцию обратного вызова.

void onReadDataComplete(boost::system::error_code ec, std::size_t bytes_transferred)

Но не очень понятно, как я могу сделать то же самое с сопрограммой.

1 Ответ

0 голосов
/ 28 апреля 2019

Внимательно прочитайте эту ссылку .

Ваша исходная функция async_read может быть вызвана с помощью handler или yield.Подпись обработчика должна быть

void handler(boost::system::error_code ec, result_type result);

, где result означает, сколько байтов было прочитано.Когда вы звоните async_read с yield вместо handler, async_read возвращает result_type, то есть size_t - что означает счетчик прочитанных байтов.Так что вам нужно только проверить возвращаемое значение от async_read.

...