From 44f671c5e3cbc41448634b2b1ebc6e0d3399a1fd Mon Sep 17 00:00:00 2001 From: hoping Date: Wed, 26 May 2021 14:44:04 +0800 Subject: [PATCH] fix Interest operation --- src/proxy/tcp_server.rs | 14 ++++++++++---- src/server/tcp_backend.rs | 14 ++++++++++---- src/server/udp_backend.rs | 14 ++++++++++---- src/tls_conn.rs | 14 ++++++++++---- 4 files changed, 40 insertions(+), 16 deletions(-) diff --git a/src/proxy/tcp_server.rs b/src/proxy/tcp_server.rs index 20fe239..fbddd02 100644 --- a/src/proxy/tcp_server.rs +++ b/src/proxy/tcp_server.rs @@ -257,19 +257,25 @@ impl Connection { _ => { let mut changed = false; if !self.send_buffer.is_empty() && !self.client_readiness.is_writable() { - self.client_readiness.add(Interest::WRITABLE); + self.client_readiness |= Interest::WRITABLE; changed = true; } if self.send_buffer.is_empty() && self.client_readiness.is_writable() { - self.client_readiness.remove(Interest::WRITABLE); + self.client_readiness = self + .client_readiness + .remove(Interest::WRITABLE) + .unwrap_or(Interest::READABLE); changed = true; } if self.server_conn.writable() && !self.client_readiness.is_readable() { - self.client_readiness.add(Interest::READABLE); + self.client_readiness |= Interest::READABLE; changed = true; } if !self.server_conn.writable() && self.client_readiness.is_readable() { - self.client_readiness.remove(Interest::READABLE); + self.client_readiness = self + .client_readiness + .remove(Interest::READABLE) + .unwrap_or(Interest::WRITABLE); changed = true; } diff --git a/src/server/tcp_backend.rs b/src/server/tcp_backend.rs index d6e0b9e..96d030f 100644 --- a/src/server/tcp_backend.rs +++ b/src/server/tcp_backend.rs @@ -103,22 +103,28 @@ impl Backend for TcpBackend { _ => { let mut changed = false; if !self.send_buffer.is_empty() && !self.readiness.is_writable() { - self.readiness.add(Interest::WRITABLE); + self.readiness |= Interest::WRITABLE; changed = true; log::debug!("connection:{} add writable to tcp target", self.index); } if self.send_buffer.is_empty() && self.readiness.is_writable() { - self.readiness.remove(Interest::WRITABLE); + self.readiness = self + .readiness + .remove(Interest::WRITABLE) + .unwrap_or(Interest::READABLE); changed = true; log::debug!("connection:{} remove writable from tcp target", self.index); } if readable && !self.readiness.is_readable() { - self.readiness.add(Interest::READABLE); + self.readiness |= Interest::READABLE; log::debug!("connection:{} add readable to tcp target", self.index); changed = true; } if !readable && self.readiness.is_readable() { - self.readiness.remove(Interest::READABLE); + self.readiness = self + .readiness + .remove(Interest::READABLE) + .unwrap_or(Interest::WRITABLE); log::debug!("connection:{} remove readable from tcp target", self.index); changed = true; } diff --git a/src/server/udp_backend.rs b/src/server/udp_backend.rs index 7e9be77..df76696 100644 --- a/src/server/udp_backend.rs +++ b/src/server/udp_backend.rs @@ -191,22 +191,28 @@ impl Backend for UdpBackend { _ => { let mut changed = false; if !self.send_buffer.is_empty() && !self.readiness.is_writable() { - self.readiness.add(Interest::WRITABLE); + self.readiness |= Interest::WRITABLE; changed = true; log::debug!("connection:{} add writable to udp target", self.index); } if self.send_buffer.is_empty() && self.readiness.is_writable() { - self.readiness.remove(Interest::WRITABLE); + self.readiness = self + .readiness + .remove(Interest::WRITABLE) + .unwrap_or(Interest::READABLE); changed = true; log::debug!("connection:{} remove writable from udp target", self.index); } if readable && !self.readiness.is_readable() { - self.readiness.add(Interest::READABLE); + self.readiness |= Interest::READABLE; log::debug!("connection:{} add readable to udp target", self.index); changed = true; } if !readable && self.readiness.is_readable() { - self.readiness.remove(Interest::READABLE); + self.readiness = self + .readiness + .remove(Interest::READABLE) + .unwrap_or(Interest::WRITABLE); log::debug!("connection:{} remove readable to udp target", self.index); changed = true; } diff --git a/src/tls_conn.rs b/src/tls_conn.rs index 2926512..5f65871 100644 --- a/src/tls_conn.rs +++ b/src/tls_conn.rs @@ -190,20 +190,26 @@ impl TlsConn { _ => { let mut changed = false; if self.session.wants_write() && !self.readiness.is_writable() { - self.readiness.add(Interest::WRITABLE); + self.readiness |= Interest::WRITABLE; changed = true; } if !self.session.wants_write() && self.readiness.is_writable() { - self.readiness.remove(Interest::WRITABLE); + self.readiness = self + .readiness + .remove(Interest::WRITABLE) + .unwrap_or(Interest::READABLE); changed = true; } if readable && !self.readiness.is_readable() { - self.readiness.add(Interest::READABLE); + self.readiness |= Interest::READABLE; changed = true; } if !readable && self.readiness.is_readable() { - self.readiness.remove(Interest::READABLE); + self.readiness = self + .readiness + .remove(Interest::READABLE) + .unwrap_or(Interest::WRITABLE); changed = true; } if changed {