The end of a stream can cause 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.
An EOF error may be used to distinguish the end of a stream from a successful
read of size 0.