...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
Many I/O objects in Boost.Asio are stream-oriented. This means that:
Objects that provide stream-oriented I/O model one or more of the following type requirements:
SyncReadStream
, where
synchronous read operations are performed using a member function called
read_some()
.
AsyncReadStream
, where
asynchronous read operations are performed using a member function called
async_read_some()
.
SyncWriteStream
, where
synchronous write operations are performed using a member function called
write_some()
.
AsyncWriteStream
, where
synchronous write operations are performed using a member function called
async_write_some()
.
Examples of stream-oriented I/O objects include ip::tcp::socket
,
ssl::stream<>
,
posix::stream_descriptor
, windows::stream_handle
,
etc.
Programs typically want to transfer an exact number of bytes. When a short
read or short write occurs the program must restart the operation, and
continue to do so until the required number of bytes has been transferred.
Boost.Asio provides generic functions that do this automatically: read()
,
async_read()
,
write()
and async_write()
.
read
,
async_read
, read_until
or async_read_until
functions to violate their contract. E.g. a read of N bytes may finish
early due to EOF.
async_read(), async_write(), read(), write(), AsyncReadStream, AsyncWriteStream, SyncReadStream, SyncWriteStream.