handle buffer correctly
This commit is contained in:
36
src/main.rs
36
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<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();
|
||||
|
Reference in New Issue
Block a user