socket9 0.1.0-alpha.1

Extended untilities for the networking/unix sockets and raw network sockets
Documentation
use windows_sys::Win32::Networking::WinSock::{IPPROTO, IPPROTO_ICMP, IPPROTO_ICMPV6, IPPROTO_SCTP, IPPROTO_TCP, IPPROTO_UDP, WSAPROTOCOL_INFOW};

/// A socket `protocol`. Is optional on some OSes like
/// OSX. In this case it should be set to [So9SockProtocol::NONE].
#[repr(transparent)]
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
pub struct So9SockProtocol(pub IPPROTO);

impl So9SockProtocol
{
    /// Unspecified or not available.
    pub const NONE: Self = Self(0);

    /// [IPPROTO_ICMP] protocol
    pub const ICMPV4: Self = Self(IPPROTO_ICMP);

    /// [IPPROTO_ICMPV6] protocol
    pub const ICMPV6: Self = Self(IPPROTO_ICMPV6);

    /// [IPPROTO_TCP] protocol
    pub const TCP: Self = Self(IPPROTO_TCP);

    /// [IPPROTO_UDP] protocol
    pub const UDP: Self = Self(IPPROTO_UDP);
    
    /// [IPPROTO_SCTP] protocol
    pub const SCTP: Self = Self(IPPROTO_SCTP);
}


impl From<WSAPROTOCOL_INFOW> for So9SockProtocol
{
    fn from(value: WSAPROTOCOL_INFOW) -> Self 
    {
        Self(value.iProtocol)
    }
}