diff --git a/Cargo.toml b/Cargo.toml index e1029b5..d4adbd2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ name = "revpfw3" repository = "https://github.com/tudbut/revpfw3" description = "A tool to bypass portforwarding restrictions using some cheap VServer" license = "MIT" -version = "0.3.1" +version = "0.4.0" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/src/client.rs b/src/client.rs index ff7a62b..6637dfc 100644 --- a/src/client.rs +++ b/src/client.rs @@ -107,7 +107,6 @@ fn resync(tcp: &mut SocketAdapter) { eprintln!("Resync was not successful. Stopping."); panic!("broken connection or server version mismatch."); } - tcp.set_nonblocking(true); tcp.internal.set_print(true); } @@ -138,11 +137,11 @@ pub fn client(params: ClientParams) { println!("READY!"); let mut tcp = SocketAdapter::new(tcp); - tcp.set_nonblocking(true); let mut sockets: HashMap = HashMap::new(); let mut id = 0; let mut last_keep_alive = SystemTime::now(); loop { + tcp.set_nonblocking(true); thread::sleep(Duration::from_millis(params.rate_limit_sleep)); let mut did_anything = false; diff --git a/src/server.rs b/src/server.rs index ad069d7..351c74c 100644 --- a/src/server.rs +++ b/src/server.rs @@ -20,7 +20,6 @@ fn resync(tcp: &mut SocketAdapter) { eprintln!( "Sent resync packet. Client should now wait 8 seconds and then send a resync packet back, initiating a normal re-sync." ); - tcp.set_nonblocking(true); let mut buf = [0; 4096]; // read all packets that are still pending. while Some(Some(4096)) == tcp.poll(&mut buf).ok() {} @@ -31,7 +30,6 @@ fn resync(tcp: &mut SocketAdapter) { // server should now have stopped sending packets. waiting 5 more seconds so the client has time to // send the resync packet. thread::sleep(Duration::from_secs(5)); - tcp.set_nonblocking(true); tcp.internal.set_print(true); } @@ -67,13 +65,13 @@ pub fn server(port: u16, key: &str, sleep_delay_ms: u64) { tcpl.set_nonblocking(true).unwrap(); - let mut tcp = SocketAdapter::new(Connection::new_tcp(tcp, false)); - tcp.set_nonblocking(true); + let mut tcp = SocketAdapter::new(Connection::new_tcp(tcp, true)); let mut sockets: HashMap = HashMap::new(); let mut id = 0; let mut last_keep_alive_sent = SystemTime::now(); let mut last_keep_alive = SystemTime::now(); loop { + tcp.set_nonblocking(true); let mut did_anything = false; if last_keep_alive_sent.elapsed().unwrap().as_secs() >= 10 { diff --git a/src/socket_adapter.rs b/src/socket_adapter.rs index feaac32..1f97946 100644 --- a/src/socket_adapter.rs +++ b/src/socket_adapter.rs @@ -104,7 +104,11 @@ impl SocketAdapter { self.internal.set_nonblocking(self.is_nonblocking)?; r } { - Ok(()) => Ok(()), + Ok(()) => { + self.written = 0; + self.to_write = 0; + Ok(()) + } Err(x) => { self.broken = Some(Broken::DirectErr(x.kind(), "io error")); Err(x)