# Struct h2::server::Connection [−] [src]

    #[must_use = "streams do nothing unless polled"]pub struct Connection<T, B: Buf> { /* fields omitted */ }

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

    let mut server = server::handshake(my_io).await.unwrap();
    while let Some(request) = server.accept().await {
        let (request, respond) = request.unwrap();
        // Process the request and send the response back to the client
        // using `respond`.
    }

## Implementations

### `impl<T, B> Connection<T, B> where
T: AsyncRead + AsyncWrite + Unpin,
B: Buf + 'static,` [src]

#### `pub async fn accept(
&mut self
) -> Option<Result<(Request<RecvStream>, SendResponse<B>), Error>>` [src]

Accept the next incoming request on this connection.

#### `pub fn set_target_window_size(&mut self, size: u32)` [src]

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 `FlowControl` 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 `FlowControl` documentation for more details.

#### `pub fn set_initial_window_size(&mut self, size: u32) -> Result<(), Error>` [src]

Set a new `INITIAL_WINDOW_SIZE` setting (in octets) for stream-level flow control for received data.

The `SETTINGS` will be sent to the remote, and only applied once the remote acknowledges the change.

This can be used to increase or decrease the window size for existing streams.

# Errors

Returns an error if a previous call is still pending acknowledgement from the remote endpoint.

#### `pub fn poll_closed(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), Error>>` [src]

Returns `Ready` when the underlying connection has closed.

If any new inbound streams are received during a call to `poll_closed`, they will be queued and returned on the next call to `poll_accept`.

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.

#### `pub fn abrupt_shutdown(&mut self, reason: Reason)` [src]

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`.

#### `pub fn graceful_shutdown(&mut self)` [src]

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.

#### `pub fn ping_pong(&mut self) -> Option<PingPong>` [src]

Takes a `PingPong` instance from the connection.

# Note

This may only be called once. Calling multiple times will return `None`.

#### `pub fn max_concurrent_send_streams(&self) -> usize` [src]

Returns the maximum number of concurrent streams that may be initiated by the server on this connection.

This limit is configured by the client peer by sending the `SETTINGS_MAX_CONCURRENT_STREAMS` parameter in a `SETTINGS` frame. This method returns the currently acknowledged value recieved from the remote.

#### `pub fn max_concurrent_recv_streams(&self) -> usize` [src]

Returns the maximum number of concurrent streams that may be initiated by the client on this connection.

This returns the value of the `SETTINGS_MAX_CONCURRENT_STREAMS` parameter sent in a `SETTINGS` frame that has been acknowledged by the remote peer. The value to be sent is configured by the `Builder::max_concurrent_streams` method before handshaking with the remote peer.

## Trait Implementations

### `impl<T, B> Debug for Connection<T, B> where
T: Debug,
B: Debug + Buf,` [src]

#### `fn fmt(&self, fmt: &mut Formatter<'_>) -> Result` [src]

Formats the value using the given formatter. Read more

## Auto Trait Implementations

### `impl<T, B> !RefUnwindSafe for Connection<T, B>`

### `impl<T, B> Send for Connection<T, B> where
B: Send,
T: Send,`

### `impl<T, B> Sync for Connection<T, B> where
B: Send + Sync,
T: Sync,`

### `impl<T, B> Unpin for Connection<T, B> where
T: Unpin,`

### `impl<T, B> !UnwindSafe for Connection<T, B>`

## Blanket Implementations

### `impl<T> Any for T where
T: 'static + ?Sized,` [src]

#### `pub fn type_id(&self) -> TypeId` [src]

Gets the `TypeId` of `self`. Read more

### `impl<T> Borrow<T> for T where
T: ?Sized,` [src]

#### `pub fn borrow(&self) -> &T` [src]

Immutably borrows from an owned value. Read more

### `impl<T> BorrowMut<T> for T where
T: ?Sized,` [src]

#### `pub fn borrow_mut(&mut self) -> &mut T` [src]

Mutably borrows from an owned value. Read more

### `impl<T> From<T> for T` [src]

#### `pub fn from(t: T) -> T` [src]

Performs the conversion.

### `impl<T> Instrument for T` [src]

#### `pub fn instrument(self, span: Span) -> Instrumented<Self>` [src]

Instruments this type with the provided `Span`, returning an `Instrumented` wrapper. Read more

#### `pub fn in_current_span(self) -> Instrumented<Self>` [src]

Instruments this type with the current `Span`, returning an `Instrumented` wrapper. Read more

### `impl<T, U> Into<U> for T where
U: From<T>,` [src]

#### `pub fn into(self) -> U` [src]

Performs the conversion.

### `impl<T, U> TryFrom<U> for T where
U: Into<T>,` [src]

#### `type Error = Infallible`

The type returned in the event of a conversion error.

#### `pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>` [src]

Performs the conversion.

### `impl<T, U> TryInto<U> for T where
U: TryFrom<T>,` [src]

#### `type Error = <U as TryFrom<T>>::Error`

The type returned in the event of a conversion error.

#### `pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>` [src]

Performs the conversion.