Skip to main content

Config

Struct Config 

Source
pub struct Config { /* private fields */ }

Implementations§

Source§

impl Config

Source

pub fn initial_stream_window_size(self, sz: impl Into<Option<u32>>) -> Self

Sets the SETTINGS_INITIAL_WINDOW_SIZE option for HTTP2 stream-level flow control.

If None is specified, hyper’s default is used (currently 1 MiB; the HTTP/2 spec default of 65,535 bytes only applies to implementations that never adjust it).

Source

pub fn initial_connection_window_size(self, sz: impl Into<Option<u32>>) -> Self

Sets the max connection-level flow control for HTTP2

If None is specified, hyper’s default is used (currently 1 MiB).

Note that hyper’s default equals the per-stream window, so a single stream stalled mid-upload can pin the entire connection receive window and starve every other stream on the connection. Workloads with large or streaming request bodies should consider raising this to a multiple of the stream window.

Source

pub fn max_concurrent_streams(self, max: impl Into<Option<u32>>) -> Self

Sets the SETTINGS_MAX_CONCURRENT_STREAMS option for HTTP2 connections.

Default is 200, matching hyper’s hardened default. Passing None removes the limit entirely and advertises unlimited concurrent streams to the peer; this makes the server vulnerable to Rapid-Reset-style resource exhaustion and should be an explicit, deliberate choice.

Source

pub fn max_connection_age(self, max_connection_age: Duration) -> Self

Sets the maximum time option in milliseconds that a connection may exist

When a connection reaches its maximum age it is shut down gracefully: for HTTP/2 a GOAWAY is sent, and in-flight requests are allowed to complete. See Config::max_connection_age_grace for bounding how long that completion may take.

Default is no limit (None).

Source

pub fn max_connection_age_grace( self, max_connection_age_grace: Duration, ) -> Self

Sets the grace period allowed after a graceful shutdown of a connection is initiated before the connection is forcefully closed.

The grace period applies however the graceful shutdown was triggered: Config::max_connection_age expiring, ConnectionInfo::close, or ServerHandle::trigger_shutdown.

A graceful shutdown waits for in-flight requests to complete, but a stream that can make no progress – for example, a response wedged behind HTTP/2 flow-control windows that a stalled or vanished peer never reopens – would keep the connection alive forever. Once the grace period expires the connection is dropped along with any streams still in flight, following the semantics of grpc-go’s MAX_CONNECTION_AGE_GRACE. This is the only server-side mechanism that reclaims send-stalled streams: middleware cannot do it because the response body is no longer polled once the stream stalls.

Default is an unlimited grace period (None): the connection stays open until every in-flight request completes.

Source

pub fn http2_keepalive_interval( self, http2_keepalive_interval: Option<Duration>, ) -> Self

Set whether HTTP2 Ping frames are enabled on accepted connections.

If None is specified, HTTP2 keepalive is disabled, otherwise the duration specified will be the time interval between HTTP2 Ping frames. The timeout for receiving an acknowledgement of the keepalive ping can be set with Config::http2_keepalive_timeout.

Default is no HTTP2 keepalive (None)

Source

pub fn http2_keepalive_timeout( self, http2_keepalive_timeout: Option<Duration>, ) -> Self

Sets a timeout for receiving an acknowledgement of the keepalive ping.

If the ping is not acknowledged within the timeout, the connection will be closed. Does nothing if http2_keep_alive_interval is disabled.

Default is 20 seconds.

Source

pub fn http2_adaptive_window(self, enabled: Option<bool>) -> Self

Sets whether to use an adaptive flow control. Defaults to false. Enabling this will override the limits set in http2_initial_stream_window_size and http2_initial_connection_window_size.

Warning: enabling this resets both receive windows to the HTTP/2 spec default of 65,535 bytes until BDP probing ramps them back up. Until then the whole connection has a single stalled stream’s worth of window, so one slow reader can starve every other stream on the connection. For multiplexed streaming workloads this measurably underperforms the static defaults; prefer setting explicit window sizes instead.

Source

pub fn http2_max_pending_accept_reset_streams(self, max: Option<usize>) -> Self

Configures the maximum number of pending reset streams allowed before a GOAWAY will be sent.

This will default to whatever the default in h2 is. As of v0.3.17, it is 20.

See https://github.com/hyperium/hyper/issues/2877 for more information.

Source

pub fn tcp_keepalive(self, tcp_keepalive: Option<Duration>) -> Self

Set whether TCP keepalive messages are enabled on accepted connections.

If None is specified, keepalive is disabled, otherwise the duration specified will be the time to remain idle before sending TCP keepalive probes.

Default is no keepalive (None)

Source

pub fn tcp_nodelay(self, enabled: bool) -> Self

Set the value of TCP_NODELAY option for accepted connections. Enabled by default.

Source

pub fn http2_max_header_list_size(self, max: impl Into<Option<u32>>) -> Self

Sets the max size of received header frames.

This will default to whatever the default in hyper is. As of v1.4.1, it is 16 KiB.

Source

pub fn max_frame_size(self, frame_size: impl Into<Option<u32>>) -> Self

Sets the maximum frame size to use for HTTP2.

Passing None will do nothing.

If not set, will default from underlying transport.

Source

pub fn http1_header_read_timeout(self, timeout: Option<Duration>) -> Self

Sets a timeout for receiving the complete header block of an HTTP/1 request.

If a client does not transmit its entire header block within this duration the connection is closed. This is the defense against slowloris-style attacks, where clients hold sockets open indefinitely by sending partial requests. Pass None to disable the timeout.

Has no effect on HTTP/2 connections, whose liveness is covered by Config::http2_keepalive_interval.

Default is 30 seconds, matching hyper.

Source

pub fn accept_http1(self, accept_http1: bool) -> Self

Allow this accepting http1 requests.

When false, plain-text connections are served in HTTP/2-only (prior knowledge) mode: the protocol sniff is skipped and anything that is not an HTTP/2 preface is rejected at the transport level. TLS connections additionally stop advertising http/1.1 via ALPN. hyper’s HTTP/1 upgrade mechanism is unavailable in this mode; HTTP/2 extended CONNECT is unaffected.

Default is true.

Source

pub fn tls_handshake_timeout(self, timeout: Duration) -> Self

Sets the timeout for TLS handshakes on incoming connections.

Connections that do not complete the TLS handshake within this duration are dropped.

Default is 5 seconds.

Source

pub fn max_pending_connections(self, max: usize) -> Self

Sets the maximum number of pending TLS handshakes.

When this limit is reached, new incoming connections are dropped until existing handshakes complete or time out.

Default is 4096.

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Config

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

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

fn in_current_span(self) -> Instrumented<Self>

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

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

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

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more