ENet/laminar style, Quinn (QUIC) based, simple to use and async net lib with configurable reliability and ordering.
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
```rust // examples/simple-server.rs let bindaddr = SocketAddrV4::new(Ipv4Addr::LOCALHOST, 13331); let mut listener = Listener::bind(bindaddr.into());
while let Some(socket) = listener.next().await { socket .send(Packet::orderedfrom( format!("Hello {}!", socket.remote()).asbytes(), None, )) .await .unwrap(); }
// examples/simple-client.rs let serveraddr = SocketAddrV4::new(Ipv4Addr::LOCALHOST, 13331); let mut socket = Socket::connect(serveraddr.into()).await.unwrap();
println!( "{}", std::str::from_utf8(&socket.recv().await.unwrap().bytes[..]).unwrap() ); ```
[ ] 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)
Licensed under either of MIT license or Apache-2.0 license.
I am not a lawyer.