DualListener

Enum DualListener 

Source
pub enum DualListener {
    Tcp(TcpListener),
    Uds(UnixListener),
}
Expand description

A unified listener that can bind to either TCP or Unix Domain Socket addresses.

This enum allows you to create a single listener type that can handle both TCP and UDS connections transparently. The specific variant is determined at runtime based on the address format provided to DualListener::bind.

§Examples

use axum_listener::listener::DualListener;

// Bind to TCP
let tcp_listener = DualListener::bind("localhost:8080").await.unwrap();

// Bind to Unix Domain Socket (on Unix systems)
let uds_listener = DualListener::bind("unix:/tmp/app.sock").await.unwrap();

§Platform Support

  • Tcp variant is available on all platforms
  • Uds variant is only available on Unix-like systems

Variants§

§

Tcp(TcpListener)

A TCP listener for network connections

§

Uds(UnixListener)

A Unix Domain Socket listener for local inter-process communication

Implementations§

Source§

impl DualListener

Source

pub async fn bind<A: ToDualAddr>(address: A) -> Result<Self, Error>

Creates a new DualListener bound to the specified address.

This method accepts any type that implements ToDualAddr, allowing for flexible address specification. The listener type (TCP or UDS) is automatically determined based on the address format.

§Arguments
  • address - An address that can be converted to DualAddr
§Returns

Returns a DualListener bound to the specified address, or an error if binding fails.

§Examples
use axum_listener::listener::DualListener;

// Bind to TCP address
let listener = DualListener::bind("localhost:8080").await.unwrap();

// Bind to UDS address (Unix only)
let listener = DualListener::bind("unix:/tmp/app.sock").await.unwrap();
§Errors

This method can fail if:

  • The address format is invalid
  • The address is already in use
  • Permission is denied for the requested address
  • Unix Domain Sockets are not supported on the current platform
Source

pub async fn accept(&self) -> Result<(DualStream, DualAddr), Error>

Accepts a new incoming connection from this listener.

This method will wait for a connection to be established and return a stream and address representing the connection.

§Returns

Returns a tuple containing:

  • DualStream: The stream for communicating with the client
  • DualAddr: The address of the connected client
§Examples
use axum_listener::listener::DualListener;

let listener = DualListener::bind("localhost:8080").await.unwrap();

// Accept a connection
let (stream, addr) = listener.accept().await.unwrap();
println!("Accepted connection from: {:?}", addr);
§Errors

This method can fail if there’s an I/O error while accepting the connection.

Trait Implementations§

Source§

impl Debug for DualListener

Source§

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

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

impl Listener for DualListener

Source§

type Io = DualStream

The listener’s IO type.
Source§

type Addr = DualAddr

The listener’s address type.
Source§

async fn accept(&mut self) -> (Self::Io, Self::Addr)

Accept a new incoming connection to this listener. Read more
Source§

fn local_addr(&self) -> Result<Self::Addr, Error>

Returns the local address that this listener is bound to.

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<L> ListenerExt for L
where L: Listener,

Source§

fn tap_io<F>(self, tap_fn: F) -> TapIo<Self, F>
where F: FnMut(&mut Self::Io) + Send + 'static,

Run a mutable closure on every accepted Io. Read more
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
Source§

impl<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,