async-smux

Asynchronous smux (Simple MUltipleXing) library for smol / async-std.

Example

```rust use async_smux::Mux; use smol::net::{TcpListener, TcpStream}; use smol::prelude::*;

async fn echoserver() { let listener = TcpListener::bind("0.0.0.0:12345").await.unwrap(); let (stream, _) = listener.accept().await.unwrap(); let mut mux = Mux::new(stream); loop { let mut muxstream = mux.accept().await.unwrap(); let mut buf = [0u8; 1024]; let size = muxstream.read(&mut buf).await.unwrap(); muxstream.write(&buf[..size]).await.unwrap(); } }

fn main() { smol::spawn(echoserver()).detach(); smol::blockon(async { smol::Timer::after(std::time::Duration::fromsecs(1)).await; let stream = TcpStream::connect("127.0.0.1:12345").await.unwrap(); let mut mux = Mux::new(stream); for i in 0..100 { let mut muxstream = mux.connect().await.unwrap(); let mut buf = [0u8; 1024]; muxstream.write(b"hello").await.unwrap(); let size = muxstream.read(&mut buf).await.unwrap(); let reply = String::fromutf8(buf[..size].tovec()).unwrap(); println!("{}: {}", i, reply); } }); }

```