Skip to main content

Connection

Struct Connection 

Source
pub(super) struct Connection {
    streams: Receiver<Stream>,
    shared: Arc<Shared>,
}
Expand description

A connection a client upgraded to SPDY/3.1.

Fields§

§streams: Receiver<Stream>§shared: Arc<Shared>

Implementations§

Source§

impl Connection

Source

pub(super) fn serve<T, F>( io: T, idle_timeout: Option<Duration>, ping_interval: Option<Duration>, accept: F, ) -> Self
where T: AsyncRead + AsyncWrite + Send + 'static, F: Fn(&Headers) -> Result<()> + Send + 'static,

Serve SPDY on the connection. The client opens streams, accept decides about each by its headers, rejected ones get reset. The connection ends when the client closes it, violates the protocol, a write fails, like of a ping, or when it was idle for the timeout. Nothing waits for the echoes of the pings. Only the frames of the client keep the connection active, except for these echoes, and the data of the server, not its control frames, see Self::is_activity.

Source

pub(super) async fn accept(&mut self) -> Option<Stream>

The next stream the client opened, None once the connection ended.

Source

pub(super) fn activity(&self) -> Activity

When the connection was active the last time, for an idle timeout which its user applies instead of Connection::serve, see there.

Source

pub(super) fn handle(&self) -> ConnectionHandle

A handle to close the connection, while the connection itself still accepts streams.

Source

async fn ping(shared: Arc<Shared>, interval: Duration)

Ping the client until the connection ends. The pings of the server have even IDs, the client echoes them.

Source

fn is_activity(frame: &Frame) -> bool

Whether a frame of the client keeps the connection from being idle, which its answers to the pings of the server do not. Of the frames of the server only data counts, see Self::write.

Source

async fn write<T>( shared: Arc<Shared>, writer: WriteHalf<T>, encoder: Encoder, control_rx: Receiver<Frame>, data_rx: Receiver<QueuedData>, )
where T: AsyncWrite,

Write the queued frames: control frames first, then the resets of streams without queued data, then data. The data frames of a stream keep their order, its FIN goes through the same queue, and a reset of a stream with queued data follows its last frame. A reset follows the SYN_REPLY of its stream, which is queued before the stream exists.

Source

async fn write_buf<W>( writer: &mut W, buf: &[u8], written: &Activity, ) -> Result<()>
where W: AsyncWrite + Unpin,

Write all of buf, written gets touched by every part which went out, so that the end of the connection waits for a client which takes the frames slowly, see ConnectionHandle::written.

Source

fn encode_data( encoder: &mut Encoder, data: &QueuedData, buf: &mut BytesMut, ) -> Result<()>

Encode a data frame, followed by the reset of its stream if it was the last data the stream queued before its reset.

Source

fn reset_frame(stream_id: u32) -> Frame

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
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> FutureExt for T

§

fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
§

fn with_current_context(self) -> WithContext<Self> ⓘ

Attaches the current Context to this type, returning a WithContext wrapper. Read more
§

impl<T> Instrument for T

§

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

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

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.

§

impl<T> IntoRequest<T> for T

§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
§

impl<L> LayerExt<L> for L

§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in [Layered].
§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

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