use std::{
io::self,
net::{TcpListener, TcpStream},
};
async fn proxy(ring: &rio::Rio, a: &TcpStream, b: &TcpStream) -> io::Result<()> {
let buf = vec![0_u8; 512];
loop {
let read_bytes = ring.read_at(a, &buf, 0).await?;
if read_bytes == 0 {
return Ok(());
}
let buf = &buf[..read_bytes];
ring.write_at(b, &buf, 0).await?;
}
}
fn main() -> io::Result<()> {
let ring = rio::new()?;
let acceptor = TcpListener::bind("127.0.0.1:6666")?;
extreme::run(async {
loop {
let stream = ring.accept(&acceptor).await?;
match proxy(&ring, &stream, &stream).await {
Ok(()) => eprintln!("client disconnected"),
Err(e) => eprintln!("client failure: {}", e),
}
}
})
}