use anyhow; use kio; use std::{io, net, time}; fn main() -> anyhow::Result<()> { kio::run(|kio| async { run_server(kio).await.unwrap() }) } async fn run_server(mut kio: kio::Context) -> io::Result<()> { let mut socket = kio.listen("127.0.0.1:8080")?; loop { let conn = kio.accept(&mut socket).await?; kio.spawn(move |kio| async { run_conn(kio, conn).await.unwrap() }); } } async fn run_conn(mut kio: kio::Context, mut conn: net::TcpStream) -> io::Result<()> { // Set up the connection limit let mut kio = kio.timeout(time::Duration::from_secs(5)); let mut buffer = kio.buffer(4096); loop { let size = kio.read(&mut conn, &mut buffer).await?; if size == 0 { return Ok(()); } kio.write_full(&mut conn, &buffer[..size]).await?; } }