If a transport is closed, it can be opened by calling open(), and vice
versa for close().
While a transport should always be open when trying to read/write data,
the related functions do not necessarily fail when called for a closed
transport. Situations like this could occur e.g. with a wrapper
transport which buffers data when the underlying transport has already
been closed (possibly because the connection was abruptly closed), but
there is still data left to be read in the buffers. This choice has been
made to simplify transport implementations, in terms of both code
complexity and runtime overhead.
Whether this transport is open.
If a transport is closed, it can be opened by calling open(), and vice versa for close().
While a transport should always be open when trying to read/write data, the related functions do not necessarily fail when called for a closed transport. Situations like this could occur e.g. with a wrapper transport which buffers data when the underlying transport has already been closed (possibly because the connection was abruptly closed), but there is still data left to be read in the buffers. This choice has been made to simplify transport implementations, in terms of both code complexity and runtime overhead.