Struct h2::server::Connection
source · [−]pub struct Connection<T, B: IntoBuf> { /* private fields */ }
Expand description
Accepts inbound HTTP/2.0 streams on a connection.
A Connection
is backed by an I/O resource (usually a TCP socket) and
implements the HTTP/2.0 server logic for that connection. It is responsible
for receiving inbound streams initiated by the client as well as driving the
internal state forward.
Connection
values are created by calling handshake
. Once a
Connection
value is obtained, the caller must call poll
or
poll_close
in order to drive the internal connection state forward.
See module level documentation for more details
Examples
server::handshake(my_io)
.and_then(|server| {
server.for_each(|(request, respond)| {
// Process the request and send the response back to the client
// using `respond`.
})
})
Implementations
sourceimpl<T, B> Connection<T, B> where
T: AsyncRead + AsyncWrite,
B: IntoBuf,
impl<T, B> Connection<T, B> where
T: AsyncRead + AsyncWrite,
B: IntoBuf,
sourcepub fn set_target_window_size(&mut self, size: u32)
pub fn set_target_window_size(&mut self, size: u32)
Sets the target window size for the whole connection.
If size
is greater than the current value, then a WINDOW_UPDATE
frame will be immediately sent to the remote, increasing the connection
level window by size - current_value
.
If size
is less than the current value, nothing will happen
immediately. However, as window capacity is released by
ReleaseCapacity
instances, no WINDOW_UPDATE
frames will be sent
out until the number of “in flight” bytes drops below size
.
The default value is 65,535.
See ReleaseCapacity
documentation for more details.
sourcepub fn poll_close(&mut self) -> Poll<(), Error>
pub fn poll_close(&mut self) -> Poll<(), Error>
Returns Ready
when the underlying connection has closed.
If any new inbound streams are received during a call to poll_close
,
they will be queued and returned on the next call to poll
.
This function will advance the internal connection state, driving
progress on all the other handles (e.g. RecvStream
and SendStream
).
See here for more details.
sourcepub fn abrupt_shutdown(&mut self, reason: Reason)
pub fn abrupt_shutdown(&mut self, reason: Reason)
Sets the connection to a GOAWAY state.
Does not terminate the connection. Must continue being polled to close connection.
After flushing the GOAWAY frame, the connection is closed. Any
outstanding streams do not prevent the connection from closing. This
should usually be reserved for shutting down when something bad
external to h2
has happened, and open streams cannot be properly
handled.
For graceful shutdowns, see graceful_shutdown
.
sourcepub fn graceful_shutdown(&mut self)
pub fn graceful_shutdown(&mut self)
Starts a graceful shutdown process.
Must continue being polled to close connection.
It’s possible to receive more requests after calling this method, since they might have been in-flight from the client already. After about 1 RTT, no new requests should be accepted. Once all active streams have completed, the connection is closed.
Trait Implementations
sourceimpl<T, B> Stream for Connection<T, B> where
T: AsyncRead + AsyncWrite,
B: IntoBuf,
B::Buf: 'static,
impl<T, B> Stream for Connection<T, B> where
T: AsyncRead + AsyncWrite,
B: IntoBuf,
B::Buf: 'static,
type Item = (Request<RecvStream>, SendResponse<B>)
type Item = (Request<RecvStream>, SendResponse<B>)
The type of item this stream will yield on success.
sourcefn poll(&mut self) -> Poll<Option<Self::Item>, Error>
fn poll(&mut self) -> Poll<Option<Self::Item>, Error>
Attempt to pull out the next value of this stream, returning None
if
the stream is finished. Read more
sourcefn wait(self) -> Wait<Self>
fn wait(self) -> Wait<Self>
Creates an iterator which blocks the current thread until each item of this stream is resolved. Read more
sourcefn into_future(self) -> StreamFuture<Self>
fn into_future(self) -> StreamFuture<Self>
Converts this stream into a Future
. Read more
sourcefn map<U, F>(self, f: F) -> Map<Self, F> where
F: FnMut(Self::Item) -> U,
fn map<U, F>(self, f: F) -> Map<Self, F> where
F: FnMut(Self::Item) -> U,
Converts a stream of type T
to a stream of type U
. Read more
sourcefn map_err<U, F>(self, f: F) -> MapErr<Self, F> where
F: FnMut(Self::Error) -> U,
fn map_err<U, F>(self, f: F) -> MapErr<Self, F> where
F: FnMut(Self::Error) -> U,
Converts a stream of error type T
to a stream of error type U
. Read more
sourcefn filter<F>(self, f: F) -> Filter<Self, F> where
F: FnMut(&Self::Item) -> bool,
fn filter<F>(self, f: F) -> Filter<Self, F> where
F: FnMut(&Self::Item) -> bool,
Filters the values produced by this stream according to the provided predicate. Read more
sourcefn filter_map<F, B>(self, f: F) -> FilterMap<Self, F> where
F: FnMut(Self::Item) -> Option<B>,
fn filter_map<F, B>(self, f: F) -> FilterMap<Self, F> where
F: FnMut(Self::Item) -> Option<B>,
Filters the values produced by this stream while simultaneously mapping them to a different type. Read more
sourcefn then<F, U>(self, f: F) -> Then<Self, F, U> where
F: FnMut(Result<Self::Item, Self::Error>) -> U,
U: IntoFuture,
fn then<F, U>(self, f: F) -> Then<Self, F, U> where
F: FnMut(Result<Self::Item, Self::Error>) -> U,
U: IntoFuture,
Chain on a computation for when a value is ready, passing the resulting
item to the provided closure f
. Read more
sourcefn and_then<F, U>(self, f: F) -> AndThen<Self, F, U> where
F: FnMut(Self::Item) -> U,
U: IntoFuture<Error = Self::Error>,
fn and_then<F, U>(self, f: F) -> AndThen<Self, F, U> where
F: FnMut(Self::Item) -> U,
U: IntoFuture<Error = Self::Error>,
Chain on a computation for when a value is ready, passing the successful
results to the provided closure f
. Read more
sourcefn or_else<F, U>(self, f: F) -> OrElse<Self, F, U> where
F: FnMut(Self::Error) -> U,
U: IntoFuture<Item = Self::Item>,
fn or_else<F, U>(self, f: F) -> OrElse<Self, F, U> where
F: FnMut(Self::Error) -> U,
U: IntoFuture<Item = Self::Item>,
Chain on a computation for when an error happens, passing the
erroneous result to the provided closure f
. Read more
sourcefn collect(self) -> Collect<Self>
fn collect(self) -> Collect<Self>
Collect all of the values of this stream into a vector, returning a future representing the result of that computation. Read more
sourcefn concat2(self) -> Concat2<Self> where
Self::Item: Extend<<Self::Item as IntoIterator>::Item>,
Self::Item: IntoIterator,
Self::Item: Default,
fn concat2(self) -> Concat2<Self> where
Self::Item: Extend<<Self::Item as IntoIterator>::Item>,
Self::Item: IntoIterator,
Self::Item: Default,
Concatenate all results of a stream into a single extendable destination, returning a future representing the end result. Read more
sourcefn concat(self) -> Concat<Self> where
Self::Item: Extend<<Self::Item as IntoIterator>::Item>,
Self::Item: IntoIterator,
fn concat(self) -> Concat<Self> where
Self::Item: Extend<<Self::Item as IntoIterator>::Item>,
Self::Item: IntoIterator,
please use Stream::concat2
instead
Concatenate all results of a stream into a single extendable destination, returning a future representing the end result. Read more
sourcefn fold<F, T, Fut>(self, init: T, f: F) -> Fold<Self, F, Fut, T> where
F: FnMut(T, Self::Item) -> Fut,
Fut: IntoFuture<Item = T>,
Self::Error: From<<Fut as IntoFuture>::Error>,
fn fold<F, T, Fut>(self, init: T, f: F) -> Fold<Self, F, Fut, T> where
F: FnMut(T, Self::Item) -> Fut,
Fut: IntoFuture<Item = T>,
Self::Error: From<<Fut as IntoFuture>::Error>,
Execute an accumulating computation over a stream, collecting all the values into one final result. Read more
sourcefn flatten(self) -> Flatten<Self> where
Self::Item: Stream,
<Self::Item as Stream>::Error: From<Self::Error>,
fn flatten(self) -> Flatten<Self> where
Self::Item: Stream,
<Self::Item as Stream>::Error: From<Self::Error>,
Flattens a stream of streams into just one continuous stream. Read more
sourcefn skip_while<P, R>(self, pred: P) -> SkipWhile<Self, P, R> where
P: FnMut(&Self::Item) -> R,
R: IntoFuture<Item = bool, Error = Self::Error>,
fn skip_while<P, R>(self, pred: P) -> SkipWhile<Self, P, R> where
P: FnMut(&Self::Item) -> R,
R: IntoFuture<Item = bool, Error = Self::Error>,
Skip elements on this stream while the predicate provided resolves to
true
. Read more
sourcefn take_while<P, R>(self, pred: P) -> TakeWhile<Self, P, R> where
P: FnMut(&Self::Item) -> R,
R: IntoFuture<Item = bool, Error = Self::Error>,
fn take_while<P, R>(self, pred: P) -> TakeWhile<Self, P, R> where
P: FnMut(&Self::Item) -> R,
R: IntoFuture<Item = bool, Error = Self::Error>,
Take elements from this stream while the predicate provided resolves to
true
. Read more
sourcefn for_each<F, U>(self, f: F) -> ForEach<Self, F, U> where
F: FnMut(Self::Item) -> U,
U: IntoFuture<Item = (), Error = Self::Error>,
fn for_each<F, U>(self, f: F) -> ForEach<Self, F, U> where
F: FnMut(Self::Item) -> U,
U: IntoFuture<Item = (), Error = Self::Error>,
Runs this stream to completion, executing the provided closure for each element on the stream. Read more
sourcefn from_err<E>(self) -> FromErr<Self, E> where
E: From<Self::Error>,
fn from_err<E>(self) -> FromErr<Self, E> where
E: From<Self::Error>,
Map this stream’s error to any error implementing From
for
this stream’s Error
, returning a new stream. Read more
sourcefn take(self, amt: u64) -> Take<Self>
fn take(self, amt: u64) -> Take<Self>
Creates a new stream of at most amt
items of the underlying stream. Read more
sourcefn skip(self, amt: u64) -> Skip<Self>
fn skip(self, amt: u64) -> Skip<Self>
Creates a new stream which skips amt
items of the underlying stream. Read more
sourcefn fuse(self) -> Fuse<Self>
fn fuse(self) -> Fuse<Self>
Fuse a stream such that poll
will never again be called once it has
finished. Read more
sourcefn catch_unwind(self) -> CatchUnwind<Self> where
Self: UnwindSafe,
fn catch_unwind(self) -> CatchUnwind<Self> where
Self: UnwindSafe,
Catches unwinding panics while polling the stream. Read more
sourcefn buffered(self, amt: usize) -> Buffered<Self> where
Self::Item: IntoFuture,
<Self::Item as IntoFuture>::Error == Self::Error,
fn buffered(self, amt: usize) -> Buffered<Self> where
Self::Item: IntoFuture,
<Self::Item as IntoFuture>::Error == Self::Error,
An adaptor for creating a buffered list of pending futures. Read more
sourcefn buffer_unordered(self, amt: usize) -> BufferUnordered<Self> where
Self::Item: IntoFuture,
<Self::Item as IntoFuture>::Error == Self::Error,
fn buffer_unordered(self, amt: usize) -> BufferUnordered<Self> where
Self::Item: IntoFuture,
<Self::Item as IntoFuture>::Error == Self::Error,
An adaptor for creating a buffered list of pending futures (unordered). Read more
sourcefn merge<S>(self, other: S) -> Merge<Self, S> where
S: Stream<Error = Self::Error>,
fn merge<S>(self, other: S) -> Merge<Self, S> where
S: Stream<Error = Self::Error>,
functionality provided by select
now
An adapter for merging the output of two streams. Read more
sourcefn zip<S>(self, other: S) -> Zip<Self, S> where
S: Stream<Error = Self::Error>,
fn zip<S>(self, other: S) -> Zip<Self, S> where
S: Stream<Error = Self::Error>,
An adapter for zipping two streams together. Read more
sourcefn chain<S>(self, other: S) -> Chain<Self, S> where
S: Stream<Item = Self::Item, Error = Self::Error>,
fn chain<S>(self, other: S) -> Chain<Self, S> where
S: Stream<Item = Self::Item, Error = Self::Error>,
Adapter for chaining two stream. Read more
sourcefn peekable(self) -> Peekable<Self>
fn peekable(self) -> Peekable<Self>
Creates a new stream which exposes a peek
method. Read more
sourcefn chunks(self, capacity: usize) -> Chunks<Self>
fn chunks(self, capacity: usize) -> Chunks<Self>
An adaptor for chunking up items of the stream inside a vector. Read more
sourcefn select<S>(self, other: S) -> Select<Self, S> where
S: Stream<Item = Self::Item, Error = Self::Error>,
fn select<S>(self, other: S) -> Select<Self, S> where
S: Stream<Item = Self::Item, Error = Self::Error>,
Creates a stream that selects the next element from either this stream or the provided one, whichever is ready first. Read more
sourcefn forward<S>(self, sink: S) -> Forward<Self, S> where
S: Sink<SinkItem = Self::Item>,
Self::Error: From<<S as Sink>::SinkError>,
fn forward<S>(self, sink: S) -> Forward<Self, S> where
S: Sink<SinkItem = Self::Item>,
Self::Error: From<<S as Sink>::SinkError>,
A future that completes after the given stream has been fully processed into the sink, including flushing. Read more
sourcefn split(self) -> (SplitSink<Self>, SplitStream<Self>) where
Self: Sink,
fn split(self) -> (SplitSink<Self>, SplitStream<Self>) where
Self: Sink,
Splits this Stream + Sink
object into separate Stream
and Sink
objects. Read more
sourcefn inspect<F>(self, f: F) -> Inspect<Self, F> where
F: FnMut(&Self::Item),
fn inspect<F>(self, f: F) -> Inspect<Self, F> where
F: FnMut(&Self::Item),
Do something with each item of this stream, afterwards passing it on. Read more
sourcefn inspect_err<F>(self, f: F) -> InspectErr<Self, F> where
F: FnMut(&Self::Error),
fn inspect_err<F>(self, f: F) -> InspectErr<Self, F> where
F: FnMut(&Self::Error),
Do something with the error of this stream, afterwards passing it on. Read more
Auto Trait Implementations
impl<T, B> !RefUnwindSafe for Connection<T, B>
impl<T, B> Send for Connection<T, B> where
T: Send,
<B as IntoBuf>::Buf: Send,
impl<T, B> Sync for Connection<T, B> where
T: Sync,
<B as IntoBuf>::Buf: Send + Sync,
impl<T, B> Unpin for Connection<T, B> where
T: Unpin,
<B as IntoBuf>::Buf: Unpin,
impl<T, B> !UnwindSafe for Connection<T, B>
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcepub fn borrow_mut(&mut self) -> &mut T
pub fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more