Многие объекты ввода-вывода в Boost. Asio ориентированы на поток. Это означает, что:
Нет никаких границ сообщений. Передаваемые данные представляют собой непрерывную последовательность байтов.
Операции чтения или записи могут передавать меньше байтов, чем запрашивалось. Это называется коротким чтением или коротким письмом.
Объекты, которые обеспечивают ориентированную на поток модель ввода/вывода, один или несколько из следующих типов требований:
SyncReadStream, где синхронные операции чтения выполняются с использованием функции члена, называемойread_some().
AsyncReadStream, где асинхронные операции считывания выполняются с использованием функции члена, называемойasync_read_some().
SyncWriteStream, где синхронные операции записи выполняются с использованием функции члена, называемойwrite_some().
AsyncWriteStream, где синхронные операции записи выполняются с использованием функции члена, называемойasync_write_some().
Примеры ориентированных на поток объектов ввода/вывода включаютip::tcp::разъем,ssl::поток<>,posix::поток_дескриптор,окна::stream_handleи т.д.
Программы обычно хотят передать точное количество байтов. Когда происходит короткое чтение или короткая запись, программа должна перезапустить операцию и продолжать делать это до тех пор, пока не будет передано необходимое количество байтов. Повышаю. Asio предоставляет общие функции, которые делают это автоматически:читать(),async_read(),писать()иasync_write().
Конец потока может заставитьчитать,async_read,читать_untilилиasync_read_untilфункции нарушать их контракт. Например, чтение N байтов может закончиться раньше из-за EOF.
Ошибка EOF может быть использована, чтобы отличить конец потока от успешного чтения размера 0.
Статья Streams, Short Reads and Short Writes раздела Boost.Asio Core Concepts and Functionality может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.