Many I/O objects in 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
asynchronous 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.
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.