1 unstable release
0.2.0 | Jul 10, 2022 |
---|
#7 in #unordered
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