handle buffer correctly

This commit is contained in:
2025-06-27 00:12:34 +08:00
parent 6a463cb1d7
commit 82e0cb12b0

View File

@ -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<dyn std::error::Error>> {
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();