socks5x 0.1.3

A simple, async SOCKS5 proxy library for Rust
Documentation
use std::sync::Arc;

use socks5x::server::{ClientHandler, DefaultConnectionCreator};
use tokio::net::TcpListener;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let listener = TcpListener::bind("127.0.0.1:1080").await?;
    println!("SOCKS5 proxy server listening on 127.0.0.1:1080");

    let client_handler = Arc::new(ClientHandler::no_auth(DefaultConnectionCreator));

    loop {
        let (socket, addr) = listener.accept().await?;
        println!("New client connection from: {}", addr);
        let client_handler = client_handler.clone();

        tokio::spawn(async move {
            if let Err(e) = client_handler.handle(socket).await {
                eprintln!("Error handling client {}: {}", addr, e);
            } else {
                println!("Client {} disconnected", addr);
            }
        });
    }
}