1 unstable release

0.2.0 Jul 10, 2022

#7 in #unordered

MIT/Apache

29KB
659 lines

eznet

a simple net lib

ENet/laminar style, Quinn (QUIC) based, simple to use and async net lib with configurable reliability and ordering.

Features:

  • Packets are encrypted (but not really securely TODO: 1)

  • Reliable ordered, reliable sequenced, reliable unordered, unreliable sequenced and unreliable unordered packets

  • Easy to use

  • Async/await

Example:

// examples/simple-server.rs
let bind_addr = SocketAddrV4::new(Ipv4Addr::LOCALHOST, 13331);
let mut listener = Listener::bind(bind_addr.into());

while let Some(socket) = listener.next().await {
    socket
        .send(Packet::ordered_from(
            format!("Hello {}!", socket.remote()).as_bytes(),
            None,
        ))
        .await
        .unwrap();
}

// examples/simple-client.rs
let server_addr = SocketAddrV4::new(Ipv4Addr::LOCALHOST, 13331);
let mut socket = Socket::connect(server_addr.into()).await.unwrap();

println!(
    "{}",
    std::str::from_utf8(&socket.recv().await.unwrap().bytes[..]).unwrap()
);

TODO:

  • Encryption doesn't protect from MITM attacks at the moment. Only self signed server side certificates are used and clients accept everything. Add certificates, private keys, server names and DNS. (1)

  • Open socket magic byte test to filter out random scanners and 'accidental' connections. (2)

  • Disconnect message when closing. (3)

  • Configurable buffer capacity. (4)

  • if packets are sent slightly faster than once per millisecond, none of them get actually sent, all of them are buffered. (5)

  • actually drop 'old' sequenced packets (6)

License

Licensed under either of MIT license or Apache-2.0 license.

I am not a lawyer.

Dependencies

~15–26MB
~488K SLoC