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
// examples/simple-server.rs
let mut listener = Listener::bind("127.0.0.1:13331".parse().unwrap()).unwrap();
while let Ok(socket) = listener.next().await {
socket
.send(Packet::ordered(format!("Hello {}!", socket.remote()), None))
.await
.unwrap();
}
// examples/simple-client.rs
let mut socket = Socket::connect("127.0.0.1:13331".parse().unwrap())
.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)
-
list of breaking versions and testing it when filtering (7)
-
More unit tests
-
Socket events. (Disconnect, Timeout, Packet, ...)
Licensed under either of MIT license or Apache-2.0 license.
I am not a lawyer.
Currently the Minimum Supported Rust Version is 1.58. I do not care to 'minimize' this and it is what it is.