socket9 0.1.0-alpha.1

Extended untilities for the networking/unix sockets and raw network sockets
Documentation
#![cfg(windows)]

use std::
{
    net::{SocketAddrV4, UdpSocket}, 
    os::windows::io::{AsRawSocket, AsSocket, BorrowedSocket, OwnedSocket, RawSocket}
};

use socket9::
{
    AsOsDescr, So9DomainRange, So9MsgFlags, So9SockDwFlags, So9SockProtocol, So9SockType, Socket9ExtSo, address::So9DomainInets, socket::{So9Marker, So9MarkerBind, So9MarkerStateless, Socket9}
};

#[derive(Debug)]
pub struct UdpDatagramV4(UdpSocket);

impl AsSocket for UdpDatagramV4
{
    fn as_socket(&self) -> BorrowedSocket<'_> 
    {
        self.0.as_socket()
    }
}

impl AsRawSocket for UdpDatagramV4
{
    fn as_raw_socket(&self) -> RawSocket 
    {
        self.0.as_raw_socket()
    }
}

impl UdpDatagramV4
{
    
}

impl So9Marker for UdpDatagramV4
{
    type SockType = OwnedSocket;
    
    const SO_DEF_FLAGS: So9SockDwFlags = So9SockDwFlags::empty();

    const IS_LISTENING: bool = false;

    const SO_DOMAIN_GROUP: So9DomainRange = So9DomainRange::DoInets;

    const SO_TYPE: So9SockType = So9SockType::DGRAM;

    const SO_PROTO: So9SockProtocol = So9SockProtocol::NONE;

    const SOCK_SND_FLAGS: So9MsgFlags = So9MsgFlags::empty();

    const SOCK_SND_VECT_FLAGS: So9MsgFlags = So9MsgFlags::empty();

    const SOCK_RCV_FLAGS: So9MsgFlags = So9MsgFlags::empty();

    const SOCK_RCV_VECT_FLAGS: So9MsgFlags = So9MsgFlags::empty();

    type SockAddrType = SocketAddrV4;

    type SockAddrDomain = So9DomainInets;
    
    
}


impl So9MarkerBind for UdpDatagramV4{}

impl So9MarkerStateless for UdpDatagramV4 {}

impl From<Socket9<UdpDatagramV4>> for UdpDatagramV4
{
    fn from(value: Socket9<UdpDatagramV4>) -> Self 
    {
        let ofd: OwnedSocket = value.into();
        return Self(UdpSocket::from(ofd));
    }
}

impl Socket9ExtSo<UdpDatagramV4> for Socket9<UdpDatagramV4> {}
impl Socket9ExtSo for UdpDatagramV4 {}
impl AsOsDescr for UdpDatagramV4 {}

#[test]
fn test_custrom_socket1()
{
    let rcv = Socket9::<UdpDatagramV4>::new_with_bind(&"127.0.0.1:0").unwrap();

    let rcv_local = rcv.local_addr().unwrap();

    println!("{}", rcv_local);

    let snd = Socket9::<UdpDatagramV4>::new_with_bind(&"127.0.0.1:0").unwrap();

    snd.connect(rcv_local).unwrap();


    let data = [1,2,3,4];
    
    let snd_n = snd.send(&data[..3]).unwrap();

     let mut rcv_data = [0_u8; 4];

    let rcv_n = rcv.recv(&mut rcv_data).unwrap();

    assert_eq!(rcv_n, snd_n);
    assert_eq!(&data[0..snd_n], &rcv_data[0..rcv_n]);
}