# eznet a simple net lib
[ENet](http://enet.bespin.org/)/[laminar](https://github.com/TimonPost/laminar) style, [Quinn](https://github.com/quinn-rs/quinn) ([QUIC](https://en.wikipedia.org/wiki/QUIC)) based, simple to use and async net lib with configurable reliability and ordering. ## Features: - Packets are encrypted (but not really securely [TODO](#todo): 1) - Reliable ordered, reliable sequenced, reliable unordered, unreliable sequenced and unreliable unordered packets - Easy to use - Async/await ## Example: ```rust // 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](LICENSE-MIT) or [Apache-2.0](LICENSE-APACHE) license. I am not a lawyer.