сокет boost.asio получает/отправляет функции, плохи?

Данные могут быть считаны с или записаны в подключенный сокет TCP с помощью получения (), async_receive (), отправить () или async_send () функции членства. Однако, поскольку они могли привести к коротким записям или чтениям, приложение будет обычно использовать следующие операции вместо этого: читайте (), async_read (), запишите () и async_write ().

Я действительно не понимаю, что комментарий, как считано (), async_read (), пишет (), и async_write () может также закончиться в коротких записях или чтениях, правильно?
Почему те функции не являются тем же?
Я должен использовать их вообще?
Кто-то может разъяснить что комментарий для меня?

7
задан Benjamin 28 December 2013 в 10:43
поделиться

2 ответа

read, async_read, write и async_write являются функциями composed, которые несколько раз вызовут функции класса до передачи запрошенного количества байтов. Они включены библиотекой для удобства. В противном случае каждый разработчик должен был бы реализовать одну и ту же логику.

Функции класса оборачивают базовые функции ОС напрямую, что в основном указывается в документации: эти функции могут возвращаться до передачи всех байтов.

В большинстве случаев для передачи данных следует использовать свободные (составные) функции.

6
ответ дан 7 December 2019 в 12:16
поделиться

Прежде всего, вы должны понять слово «асинхронный», оно просто означает «не нужно ждать». После вызова асинхронных действий следующее действие выполнит , не дожидаясь возврата асинхронного действия. В то время как синхронный должен ждать , пока предыдущие синхронные действия не вернутся. Два следующих примера из Boost.Asio будут иметь смысл: Синхронный дневной TCP-сервер

(К сожалению, недостаточно репутации, хотя второй образец легко найти, он называется «Асинхронный дневной TCP-сервер»)

-1
ответ дан 7 December 2019 в 12:16
поделиться
Другие вопросы по тегам:

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