Skip to main content

TunnelStats

Struct TunnelStats 

Source
pub struct TunnelStats {
    pub forwards_served: AtomicU64,
    pub capacity_waits: AtomicU64,
    pub effective_port: AtomicU32,
    pub stopped_by_signal: AtomicBool,
    pub stopped_by_accept_error: AtomicBool,
}
Expand description

Counters shared between the accept loop and the deadline wrapper.

These deliberately live outside the future passed to tokio::time::timeout. On the deadline path — the most common ending — that future is dropped mid-poll and never reaches its own tail, so anything owned by it would be lost exactly when the shutdown event matters most. Holding the counters in an Arc the wrapper also owns lets tunnel_closed be emitted on every ending.

Fields§

§forwards_served: AtomicU64

Connections accepted and handed to a forward task.

§capacity_waits: AtomicU64

Times a connection waited for a concurrency permit.

§effective_port: AtomicU32

OS-assigned local port after bind (0 until the listener is up).

§stopped_by_signal: AtomicBool

Set when the accept loop stopped because of a signal.

§stopped_by_accept_error: AtomicBool

Set when the accept loop stopped because of a fatal accept error.

Implementations§

Source§

impl TunnelStats

Source

pub fn close_reason(&self) -> TunnelCloseReason

Resolves the close reason from the flags the loop managed to set.

Defaults to crate::json_wire::TunnelCloseReason::Deadline: if neither flag is set the loop was still serving when it was cancelled, which is precisely the deadline ending.

Trait Implementations§

Source§

impl Debug for TunnelStats

Source§

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

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

impl Default for TunnelStats

Source§

fn default() -> TunnelStats

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> 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> Same for T

Source§

type Output = T

Should always be Self
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