diff --git a/src/main.rs b/src/main.rs index c37c70f..ed8e38c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,5 @@ use clap::Parser; -use std::io; +use std::io::{self, Read, Write}; use std::net::{TcpStream, ToSocketAddrs, UdpSocket}; use std::str::FromStr; use std::thread; @@ -99,12 +99,42 @@ fn main() -> Result<(), Box> { let stdin_thread = thread::spawn(move || { let mut stdin = io::stdin(); - io::copy(&mut stdin, &mut stream_clone).ok(); + let mut buffer = [0u8; 1024]; // 1KB buffer + + loop { + match stdin.read(&mut buffer) { + Ok(0) => break, // EOF + Ok(n) => { + if stream_clone.write_all(&buffer[..n]).is_err() { + break; + } + if stream_clone.flush().is_err() { + break; + } + } + Err(_) => break, + } + } }); let stdout_thread = thread::spawn(move || { let mut stdout = io::stdout(); - io::copy(&mut stream, &mut stdout).ok(); + let mut buffer = [0u8; 1024]; // 1KB buffer + + loop { + match stream.read(&mut buffer) { + Ok(0) => break, // EOF + Ok(n) => { + if stdout.write_all(&buffer[..n]).is_err() { + break; + } + if stdout.flush().is_err() { + break; + } + } + Err(_) => break, + } + } }); stdin_thread.join().unwrap();