Trait solicit::http::transport::TransportStream
[−]
[src]
pub trait TransportStream: Read + Write + Sized {
fn try_split(&self) -> Result<Self, Error>;
fn close(&mut self) -> Result<(), Error>;
fn read_exact(&mut self, buf: &mut [u8]) -> Result<()> { ... }
}A trait that any struct that wants to provide the transport layer for HTTP/2 needs to implement.
It provides default implementations for some convenience methods, backed
by the Read and Write implementations.
Required Methods
fn try_split(&self) -> Result<Self, Error>
Attempts to split the TransportStream instance into a new independently
owned handle to the same underlying stream.
fn close(&mut self) -> Result<(), Error>
Attempts to shutdown both ends of the transport stream.
If successful, all handles to the stream created by the try_split operation will start
receiving an error for any IO operations.
Provided Methods
fn read_exact(&mut self, buf: &mut [u8]) -> Result<()>
A convenience method that performs as many read calls on the
underlying Read implementation as it takes to fill the given buffer.
The implementation simply calls the read in a loop until the
buffer is filled or an aparent end of file is reached, upon which
an error is returned.
However, no particular care is taken to limit the number of loop iterations and it could theoretically be possible to end up reading a single byte at a time into a large buffer, taking a long time to return.
Any errors raised by the underlying Read implementations are
propagated.
When an error is raised, the given buffer is only partially filled, but there is no way to know how many bytes were actually written to the underlying buffer, which means that, effectively, all read bytes are lost on any error.
Implementors
impl TransportStream for TcpStream