librqbit-dualstack-sockets 0.2.0

utilities for creating dual-stack TCP and UDP tokio sockets
Documentation
use std::net::SocketAddr;

#[derive(thiserror::Error, Debug)]
pub enum Error {
    #[error("error creating socket: {0}")]
    SocketNew(std::io::Error),
    #[error("error binding to {addr}: {source}")]
    Bind {
        addr: SocketAddr,
        source: std::io::Error,
    },
    #[error("error setting only_v6={value}: {source}")]
    OnlyV6 { value: bool, source: std::io::Error },
    #[error("error setting SO_REUSEADDR: {0}")]
    ReuseAddress(std::io::Error),
    #[error("error getting local_addr(): {0}")]
    LocalAddr(std::io::Error),
    #[error("as_socket() returned None")]
    AsSocket,
    #[error("error setting nonblocking=true: {0}")]
    SetNonblocking(std::io::Error),
    #[error("mismatch between local_addr({local_addr:?}) and requested bind_addr({bind_addr:?})")]
    LocalBindAddrMismatch {
        bind_addr: SocketAddr,
        local_addr: SocketAddr,
    },
    #[error("error listening")]
    Listen(std::io::Error),
    #[error("error calling tokio from_std")]
    TokioFromStd(std::io::Error),
}

pub type Result<T> = core::result::Result<T, Error>;