tcp/
tcp.rs

1use std::{
2    io::{self, Write},
3    net::{SocketAddr, TcpListener, TcpStream},
4};
5
6use microasync::sync;
7use microasync_util::{
8    get_current_runtime,
9    io::{read::tcpstream::accept, ReadAsync},
10    wait_ms, QueuedRuntime,
11};
12
13fn main() {
14    let mut runtime = QueuedRuntime::new();
15    runtime.push(go(("0.0.0.0", 5000)));
16    sync(runtime);
17}
18
19async fn go(addr: (&str, u16)) {
20    let mut listener = TcpListener::bind(addr).unwrap();
21    loop {
22        get_current_runtime()
23            .await
24            .push(handle(accept(&mut listener).await.unwrap()));
25    }
26}
27
28async fn handle((mut stream, _): (TcpStream, SocketAddr)) {
29    let mut buf = [0_u8; 10];
30    loop {
31        let n = stream.read(&mut buf).await.unwrap();
32        if n == 0 {
33            break;
34        }
35        print!(
36            "{}",
37            buf[0..n].iter().map(|x| *x as char).collect::<String>()
38        );
39        io::stdout().flush().unwrap();
40        wait_ms(100).await; // Delay so multiple connections can accumulate, for demonstration
41                            // purposes.
42    }
43}