pub struct QuicKeepAliveSettings {
pub max_interval: Option<Duration>,
pub initial_interval: Option<Duration>,
}Expand description
Config for keepalive probes in a QUIC connection.
Note that QUIC keep-alive probing packets work differently from HTTP/2 keep-alive PINGs in a sense that the probing packet
itself doesn’t timeout waiting for a probing response. Quic has a shorter idle timeout than TCP, so it doesn’t rely on such probing to discover dead connections. If the peer fails to respond, the connection will idle timeout eventually. Thus, they are configured differently from :ref:connection_keepalive <envoy_v3_api_field_config.core.v3.Http2ProtocolOptions.connection_keepalive>.
Fields§
§max_interval: Option<Duration>The max interval for a connection to send keep-alive probing packets (with PING or PATH_RESPONSE). The value should be smaller than :ref:connection idle_timeout <envoy_v3_api_field_config.listener.v3.QuicProtocolOptions.idle_timeout> to prevent idle timeout while not less than 1s to avoid throttling the connection or flooding the peer with probes.
If :ref:initial_interval <envoy_v3_api_field_config.core.v3.QuicKeepAliveSettings.initial_interval> is absent or zero, a client connection will use this value to start probing.
If zero, disable keepalive probing. If absent, use the QUICHE default interval to probe.
initial_interval: Option<Duration>The interval to send the first few keep-alive probing packets to prevent connection from hitting the idle timeout. Subsequent probes will be sent, each one with an interval exponentially longer than previous one, till it reaches :ref:max_interval <envoy_v3_api_field_config.core.v3.QuicKeepAliveSettings.max_interval>. And the probes afterwards will always use :ref:max_interval <envoy_v3_api_field_config.core.v3.QuicKeepAliveSettings.max_interval>.
The value should be smaller than :ref:connection idle_timeout <envoy_v3_api_field_config.listener.v3.QuicProtocolOptions.idle_timeout> to prevent idle timeout and smaller than max_interval to take effect.
If absent or zero, disable keepalive probing for a server connection. For a client connection, if :ref:max_interval <envoy_v3_api_field_config.core.v3.QuicKeepAliveSettings.max_interval> is also zero, do not keepalive, otherwise use max_interval or QUICHE default to probe all the time.
Trait Implementations§
Source§impl Clone for QuicKeepAliveSettings
impl Clone for QuicKeepAliveSettings
Source§fn clone(&self) -> QuicKeepAliveSettings
fn clone(&self) -> QuicKeepAliveSettings
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for QuicKeepAliveSettings
impl Debug for QuicKeepAliveSettings
Source§impl Default for QuicKeepAliveSettings
impl Default for QuicKeepAliveSettings
Source§impl Message for QuicKeepAliveSettings
impl Message for QuicKeepAliveSettings
Source§fn encoded_len(&self) -> usize
fn encoded_len(&self) -> usize
Source§fn encode(&self, buf: &mut impl BufMut) -> Result<(), EncodeError>where
Self: Sized,
fn encode(&self, buf: &mut impl BufMut) -> Result<(), EncodeError>where
Self: Sized,
Source§fn encode_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
fn encode_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
Source§fn encode_length_delimited(
&self,
buf: &mut impl BufMut,
) -> Result<(), EncodeError>where
Self: Sized,
fn encode_length_delimited(
&self,
buf: &mut impl BufMut,
) -> Result<(), EncodeError>where
Self: Sized,
Source§fn encode_length_delimited_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
fn encode_length_delimited_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
Source§fn decode(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
fn decode(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
Source§fn decode_length_delimited(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
fn decode_length_delimited(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
Source§fn merge(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
fn merge(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
self. Read moreSource§fn merge_length_delimited(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
fn merge_length_delimited(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
self.Source§impl Name for QuicKeepAliveSettings
impl Name for QuicKeepAliveSettings
Source§const NAME: &'static str = "QuicKeepAliveSettings"
const NAME: &'static str = "QuicKeepAliveSettings"
Message.
This name is the same as it appears in the source .proto file, e.g. FooBar.Source§const PACKAGE: &'static str = "envoy.config.core.v3"
const PACKAGE: &'static str = "envoy.config.core.v3"
., e.g. google.protobuf.Source§fn full_name() -> String
fn full_name() -> String
Message.
It’s prefixed with the package name and names of any parent messages,
e.g. google.rpc.BadRequest.FieldViolation.
By default, this is the package name followed by the message name.
Fully-qualified names must be unique within a domain of Type URLs.Source§impl PartialEq for QuicKeepAliveSettings
impl PartialEq for QuicKeepAliveSettings
impl Copy for QuicKeepAliveSettings
impl StructuralPartialEq for QuicKeepAliveSettings
Auto Trait Implementations§
impl Freeze for QuicKeepAliveSettings
impl RefUnwindSafe for QuicKeepAliveSettings
impl Send for QuicKeepAliveSettings
impl Sync for QuicKeepAliveSettings
impl Unpin for QuicKeepAliveSettings
impl UnwindSafe for QuicKeepAliveSettings
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request