Skip to main content

UdpListenerSession

Struct UdpListenerSession 

Source
pub struct UdpListenerSession { /* private fields */ }
Expand description

The ProxySession backing one UDP listener. The server’s generic readiness path drives this (UDP is not in the listen-accept arm). It owns the per-flow connected upstream sockets and demuxes events by token.

Implementations§

Source§

impl UdpListenerSession

Source

pub fn new( listener: Rc<RefCell<UdpListener>>, manager: Rc<RefCell<UdpManager>>, backends: Rc<RefCell<BackendMap>>, registry: Registry, sessions: Rc<RefCell<SessionManager>>, listener_token: Token, ) -> UdpListenerSession

Source

pub fn close_all_flows(&mut self, now: Instant)

Tear down every active flow on this listener through the manager, so each close emits FlowEvicted + CloseFlow exactly once and the shell’s normal on_close_flow handler frees the upstream socket + slab slot and decrements udp.active_flows. Used on soft/hard stop, listener remove, and listener deactivate so the worker reaches its base_sessions_count and exits promptly instead of waiting out every flow’s idle timeout — and so the active-flows gauge does not leak by N (the bug the old direct-teardown path had: it cleared the shell maps without telling the manager, so FlowEvicted never fired).

On a deactivate where the manager is retained (not dropped), this also resets the manager’s flow table to empty, keeping manager and shell consistent. The listener socket and the listener-session slab slot are left intact (the listener slot is part of base_sessions_count and reclaimed when the worker exits); only the connectionless per-flow slots — which are NOT counted in nb_connections and so removed without decr — are freed.

Trait Implementations§

Source§

impl ProxySession for UdpListenerSession

Source§

fn protocol(&self) -> Protocol

indicates the protocol associated with the session Read more
Source§

fn update_readiness(&mut self, token: Token, events: Ready)

if the event loop got an event for a token associated with the session, it will call this method on the session
Source§

fn ready(&mut self, _session: Rc<RefCell<dyn ProxySession>>) -> bool

if a session received an event or can still execute, the event loop will call this method. Its result indicates if it can still execute, needs to connect to a backend server, close the session
Source§

fn timeout(&mut self, token: Token) -> bool

if a timeout associated with the session triggers, the event loop will call this method with the timeout’s token
Source§

fn close(&mut self)

close a session, frontend and backend sockets, remove the entries from the session manager slab
Source§

fn last_event(&self) -> Instant

last time the session got an event
Source§

fn print_session(&self)

display the session’s internal state (for debugging purpose)
Source§

fn frontend_token(&self) -> Token

get the token associated with the frontend
Source§

fn shutting_down(&mut self) -> bool

tell the session it has to shut down if possible Read more
Source§

fn cluster_id(&self) -> Option<String>

Best-effort identifier of the cluster currently routed to by this session. Returns None for ListenSession (no per-session cluster), and for client sessions before routing has resolved. H2 sessions multiplex many streams over one frontend token and may touch several clusters; the returned value is whichever cluster the session most recently keep-alive’d to. Used for log/metric attribution, not for accounting (the tracker keeps the canonical per-stream (cluster, IP) set).
Source§

fn session_address(&self) -> Option<SocketAddr>

Source address as observed by Sōzu, with proxy-protocol awareness. HTTP/HTTPS/TCP client sessions return the parsed PROXY-protocol source when present, else peer_addr. ListenSession returns None. Used to attribute per-(cluster, source-IP) tracking and access logs to the real client behind a layer-4 PROXY frontend.

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<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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