socket9 0.1.0-alpha.1

Extended untilities for the networking/unix sockets and raw network sockets
Documentation


use std::{ffi::c_int, fmt};

use windows_sys::Win32::Networking::WinSock::
{
    SOCK_DGRAM, SOCK_RAW, SOCK_STREAM, WINSOCK_SOCKET_TYPE, WSA_FLAG_NO_HANDLE_INHERIT, WSA_FLAG_OVERLAPPED, WSA_FLAG_REGISTERED_IO
};

use bitflags::bitflags;



/// A socket `type`.
#[repr(transparent)]
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
pub struct So9SockType(pub WINSOCK_SOCKET_TYPE);

impl So9SockType
{
    /// [SOCK_STREAM] type
    pub const STREAM: Self = Self(SOCK_STREAM);

    /// [SOCK_DGRAM] type  
    pub const DGRAM: Self = Self(SOCK_DGRAM);
    
    /// [SOCK_RAW] type  
    pub const RAW: Self = Self(SOCK_RAW);
}

impl fmt::Display for So9SockType
{
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result 
    {
        if self == &Self::STREAM
        {
            write!(f, "SOCK_STREAM")
        }
        else if self == &Self::DGRAM
        {
            write!(f, "SOCK_DGRAM")
        }
        else if self == &Self::RAW
        {
            write!(f, "SOCK_RAW")
        }
        else
        {
            write!(f, "UNKNOWN {}", self.0)
        }
    }
}

impl From<c_int> for So9SockType
{
    fn from(value: c_int) -> Self 
    {
        Self(value)
    }
}


bitflags! {
    /// A flags which are received with [recvmsg]

    #[derive(Debug, Clone, Copy, PartialEq, Eq)]
    pub struct So9SockDwFlags: u32 
    {
        /// [WSA_FLAG_OVERLAPPED]
        const OVERALPPED = WSA_FLAG_OVERLAPPED;

        /// [WSA_FLAG_NO_HANDLE_INHERIT]
        const NO_HNDL_INHERIT = WSA_FLAG_NO_HANDLE_INHERIT;

        /// [WSA_FLAG_REGISTERED_IO]
        const REGISTERED_IO = WSA_FLAG_REGISTERED_IO;
    }
}