pub struct SpscHandle { /* private fields */ }Expand description
Application-side SPSC SHM handle.
Connect with SpscHandle::connect using the same name passed to
SpscFace::create in the engine process.
Set a CancellationToken via [set_cancel] to abort recv/send when
the router’s control face disconnects (the O_RDWR FIFO trick means EOF
detection alone is unreliable).
Implementations§
Source§impl SpscHandle
impl SpscHandle
Sourcepub fn connect(name: &str) -> Result<Self, ShmError>
pub fn connect(name: &str) -> Result<Self, ShmError>
Open the SHM region created by the engine and set up the wakeup mechanism.
Sourcepub fn set_cancel(&mut self, cancel: CancellationToken)
pub fn set_cancel(&mut self, cancel: CancellationToken)
Attach a cancellation token (typically a child of the control face’s
lifecycle token). When cancelled, recv() returns None and send()
returns Err.
Sourcepub async fn send(&self, pkt: Bytes) -> Result<(), ShmError>
pub async fn send(&self, pkt: Bytes) -> Result<(), ShmError>
Send a packet to the engine (enqueue in the a2e ring).
Yields cooperatively if the ring is full (backpressure from the engine).
Returns Err(Closed) if the cancellation token fires (engine dead).
Uses a wall-clock deadline so backpressure tolerance is independent
of system scheduling speed (the old yield-counter approach returned
Closed after ~100k yields ≈ 1s on fast machines, but could be much
shorter under heavy Tokio contention — falsely killing the caller).