Skip to main content

PullSocket

Struct PullSocket 

Source
pub struct PullSocket<S = TcpStream>
where S: AsyncRead + AsyncWrite + Unpin,
{ /* private fields */ }
Expand description

PULL socket for receiving tasks in a pipeline.

PULL sockets receive messages from connected PUSH sockets.

Implementations§

Source§

impl PullSocket<TcpStream>

Source

pub async fn bind(addr: impl ToSocketAddrs) -> Result<(TcpListener, Self)>

Bind to addr, accept one connection, and return a ready PULL socket.

Returns the TcpListener so the caller can accept further PUSH connections.

§Example
use monocoque::zmq::PullSocket;

let (_listener, mut socket) = PullSocket::bind("127.0.0.1:5555").await?;
while let Ok(Some(msg)) = socket.recv().await {
    println!("Got task: {:?}", msg);
}
Source

pub async fn connect(addr: impl ToSocketAddrs) -> Result<Self>

Connect to a PUSH socket at addr.

§Example
use monocoque::zmq::PullSocket;

let mut socket = PullSocket::connect("127.0.0.1:5555").await?;
while let Ok(Some(msg)) = socket.recv().await {
    println!("Got task: {:?}", msg);
}
Source

pub async fn connect_with_options( addr: impl ToSocketAddrs, options: SocketOptions, ) -> Result<Self>

Connect with custom options, storing the endpoint for automatic reconnection.

Source

pub fn is_connected(&self) -> bool

Check if the socket is currently connected.

Source

pub async fn try_reconnect(&mut self) -> Result<()>

Try to reconnect to the stored endpoint.

Source

pub async fn recv_with_reconnect(&mut self) -> Result<Option<Vec<Bytes>>>

Receive with automatic reconnection on EOF or network error.

Source

pub async fn from_tcp(stream: TcpStream) -> Result<Self>

Create a PULL socket from a TCP stream.

Source

pub async fn from_tcp_with_options( stream: TcpStream, options: SocketOptions, ) -> Result<Self>

Create a PULL socket from a TCP stream with custom options.

Source§

impl<S> PullSocket<S>
where S: AsyncRead + AsyncWrite + Unpin,

Source

pub async fn new(stream: S) -> Result<Self>

Create a PULL socket from any stream.

Source

pub async fn with_options(stream: S, options: SocketOptions) -> Result<Self>

Create a PULL socket from any stream with custom options.

Source

pub fn try_recv(&mut self) -> Result<Option<Vec<Bytes>>>

Try to receive a message from the already-buffered input without a kernel read.

Returns Ok(None) immediately when the receive buffer is empty. Use after recv() to drain all messages delivered in one kernel read before going back to the event loop. This reduces io_uring submissions for throughput-bound pull loops.

if let Some(first) = pull.recv().await? {
    drop(first);
    while let Some(msg) = pull.try_recv()? {
        drop(msg);
    }
}
Source

pub async fn recv(&mut self) -> Result<Option<Vec<Bytes>>>

Receive a message.

Source

pub async fn recv_into(&mut self, out: &mut Vec<Bytes>) -> Result<bool>

Receive a message into a caller-provided buffer, reusing its allocation.

Like recv but the frames are written into out (cleared first) instead of a freshly allocated Vec. Passing the same out on every call removes the per-message allocation from a steady recv loop, which is the dominant per-message cost for small messages. Returns Ok(true) when a message was read, Ok(false) when the connection closed.

Source

pub fn try_recv_into(&mut self, out: &mut Vec<Bytes>) -> Result<bool>

Try to receive a message into a caller-provided buffer without a kernel read.

The allocation-free counterpart to try_recv: returns Ok(true) with the frames moved into out (reusing its capacity) when a complete message is already buffered, or Ok(false) leaving out untouched when none is. Use it with recv_into to drain a burst from one kernel read without allocating per message.

Source

pub async fn recv_batch(&mut self) -> Result<Option<Vec<Vec<Bytes>>>>

Receive a batch of messages with a single .await.

Blocks until at least one message is available, then drains every further message already decoded from the same kernel read. Returning a burst of small messages from one .await amortizes per-await overhead; it is the receive-side counterpart to PushSocket::send_batch.

Source

pub fn monitor(&mut self) -> SocketMonitor

Enable monitoring for this socket.

Source

pub fn options_mut(&mut self) -> &mut SocketOptions

Get a mutable reference to this socket’s options.

Source§

impl PullSocket<UnixStream>

Source

pub async fn from_unix_stream(stream: UnixStream) -> Result<Self>

Create a PULL socket from a Unix domain socket stream (IPC).

Source

pub async fn from_unix_stream_with_options( stream: UnixStream, options: SocketOptions, ) -> Result<Self>

Create a PULL socket from a Unix domain socket stream with custom options.

Auto Trait Implementations§

§

impl<S = TcpStream> !Freeze for PullSocket<S>

§

impl<S> RefUnwindSafe for PullSocket<S>
where S: RefUnwindSafe,

§

impl<S> Send for PullSocket<S>
where S: Send,

§

impl<S> Sync for PullSocket<S>
where S: Sync,

§

impl<S> Unpin for PullSocket<S>

§

impl<S> UnsafeUnpin for PullSocket<S>
where S: UnsafeUnpin,

§

impl<S> UnwindSafe for PullSocket<S>
where S: UnwindSafe,

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

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.

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

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

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

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