wasi-tcp-server 0.1.1

wasi tcp server
use std::io::{Read, Write};
use std::net::SocketAddr;
use std::str::from_utf8;
use wasmedge_wasi_socket::{TcpListener, TcpStream};

fn handle_client((mut stream, addr): (TcpStream, SocketAddr)) -> std::io::Result<()> {
    // 打印客户端 IP 和端口
    let local_addr = stream.local_addr()?;
    println!("{} <-> {}", addr.to_string(), local_addr);

    // 循环
    loop {
        // 初始化缓冲区
        let mut buffer = [0; 1024];
        // 读取数据
        stream.read(&mut buffer)?;
        // 转换为字符串
        let line = from_utf8(&buffer).unwrap();
        // 打印
        print!("get message: {}", line);
        println!("sendback reversed message...");
        // 字符串转换为字节切片返回给客户端
        stream.write(&line.as_bytes())?;
    }
}

fn main() -> std::io::Result<()> {
    // 从 PORT 环境变量获取端口, 默认 1234
    let port = std::env::var("PORT").unwrap_or("1234".to_string());
    println!("listening at 127.0.0.1:{}", port);
    // 监听端口并使用标准方式处理错误
    let listener = match TcpListener::bind(format!("127.0.0.1:{}", port), false) {
        Ok(ln) => ln,
        Err(e) => return Err(e),
    };
    // 处理来自客户端的请求, 同一时间只能处理一个连接
    loop {
        handle_client(listener.accept(false).unwrap())?;
    }
}