From 4ab41440ad0e0cf14bb17e6a1b6148eeb6bf8e9f Mon Sep 17 00:00:00 2001 From: hommeabeil Date: Wed, 2 Feb 2022 22:09:24 -0500 Subject: [PATCH 1/3] do not remove the uds socket on pause --- actix-server/examples/tcp-echo.rs | 2 +- actix-server/src/accept.rs | 6 +++++ actix-server/src/socket.rs | 44 ++++++++++++++++++++++--------- 3 files changed, 39 insertions(+), 13 deletions(-) diff --git a/actix-server/examples/tcp-echo.rs b/actix-server/examples/tcp-echo.rs index da0b7053c3..c84910c9a4 100644 --- a/actix-server/examples/tcp-echo.rs +++ b/actix-server/examples/tcp-echo.rs @@ -31,7 +31,7 @@ async fn run() -> io::Result<()> { let count = Arc::new(AtomicUsize::new(0)); let addr = ("127.0.0.1", 8080); - info!("starting server on port: {}", &addr.0); + info!("starting server on: {}:{}", &addr.0, &addr.1); // Bind socket address and start worker(s). By default, the server uses the number of physical // CPU cores as the worker count. For this reason, the closure passed to bind needs to return diff --git a/actix-server/src/accept.rs b/actix-server/src/accept.rs index 9f7872f873..0602343aac 100644 --- a/actix-server/src/accept.rs +++ b/actix-server/src/accept.rs @@ -217,6 +217,8 @@ impl Accept { self.deregister_all(sockets); } + self.terminate_all(sockets); + return true; } @@ -330,6 +332,10 @@ impl Accept { .for_each(|(_, info)| self.deregister_logged(info)); } + fn terminate_all(&self, sockets: &mut[ServerSocketInfo]) { + sockets.iter().for_each(|s| s.lst.terminate()); + } + // Send connection to worker and handle error. fn send_connection(&mut self, conn: Conn) -> Result<(), Conn> { let next = self.next(); diff --git a/actix-server/src/socket.rs b/actix-server/src/socket.rs index 25291fd265..e5a711d09a 100644 --- a/actix-server/src/socket.rs +++ b/actix-server/src/socket.rs @@ -38,11 +38,28 @@ impl MioListener { match *self { MioListener::Tcp(ref lst) => lst.accept().map(|(stream, _)| MioStream::Tcp(stream)), #[cfg(unix)] - MioListener::Uds(ref lst) => lst.accept().map(|(stream, _)| MioStream::Uds(stream)), + MioListener::Uds(ref lst) => { + lst.accept().map(|(stream, _)| MioStream::Uds(stream)) + } + } + } + + pub(crate) fn terminate(&self) { + match *self { + MioListener::Tcp(_) => (), + #[cfg(unix)] + MioListener::Uds(ref lst) => { + if let Ok(addr) = lst.local_addr() { + if let Some(path) = addr.as_pathname() { + let _ = std::fs::remove_file(path); + } + } + } } } } + impl Source for MioListener { fn register( &mut self, @@ -74,17 +91,7 @@ impl Source for MioListener { match *self { MioListener::Tcp(ref mut lst) => lst.deregister(registry), #[cfg(unix)] - MioListener::Uds(ref mut lst) => { - let res = lst.deregister(registry); - - // cleanup file path - if let Ok(addr) = lst.local_addr() { - if let Some(path) = addr.as_pathname() { - let _ = std::fs::remove_file(path); - } - } - res - } + MioListener::Uds(ref mut lst) => lst.deregister(registry) } } } @@ -270,4 +277,17 @@ mod tests { assert!(format!("{}", lst).contains("/tmp/sock.xxxxx")); } } + + #[test] + #[cfg(unix)] + fn uds_terminate() { + let socket_path = std::path::Path::new("/tmp/sock.xxxx1"); + let _ = std::fs::remove_file(socket_path); + if let Ok(socket) = MioUnixListener::bind(socket_path) { + let listener = MioListener::Uds(socket); + assert!(socket_path.exists()); + listener.terminate(); + assert!(!socket_path.exists()); + } + } } From 60e1ebb503b98d683270755257f355bb499d12ae Mon Sep 17 00:00:00 2001 From: hommeabeil Date: Wed, 2 Feb 2022 22:11:32 -0500 Subject: [PATCH 2/3] fmt --- actix-server/src/accept.rs | 2 +- actix-server/src/socket.rs | 15 ++++++--------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/actix-server/src/accept.rs b/actix-server/src/accept.rs index 0602343aac..664728fd06 100644 --- a/actix-server/src/accept.rs +++ b/actix-server/src/accept.rs @@ -332,7 +332,7 @@ impl Accept { .for_each(|(_, info)| self.deregister_logged(info)); } - fn terminate_all(&self, sockets: &mut[ServerSocketInfo]) { + fn terminate_all(&self, sockets: &mut [ServerSocketInfo]) { sockets.iter().for_each(|s| s.lst.terminate()); } diff --git a/actix-server/src/socket.rs b/actix-server/src/socket.rs index e5a711d09a..adb165b8ac 100644 --- a/actix-server/src/socket.rs +++ b/actix-server/src/socket.rs @@ -38,9 +38,7 @@ impl MioListener { match *self { MioListener::Tcp(ref lst) => lst.accept().map(|(stream, _)| MioStream::Tcp(stream)), #[cfg(unix)] - MioListener::Uds(ref lst) => { - lst.accept().map(|(stream, _)| MioStream::Uds(stream)) - } + MioListener::Uds(ref lst) => lst.accept().map(|(stream, _)| MioStream::Uds(stream)), } } @@ -49,17 +47,16 @@ impl MioListener { MioListener::Tcp(_) => (), #[cfg(unix)] MioListener::Uds(ref lst) => { - if let Ok(addr) = lst.local_addr() { - if let Some(path) = addr.as_pathname() { - let _ = std::fs::remove_file(path); - } + if let Ok(addr) = lst.local_addr() { + if let Some(path) = addr.as_pathname() { + let _ = std::fs::remove_file(path); } } + } } } } - impl Source for MioListener { fn register( &mut self, @@ -91,7 +88,7 @@ impl Source for MioListener { match *self { MioListener::Tcp(ref mut lst) => lst.deregister(registry), #[cfg(unix)] - MioListener::Uds(ref mut lst) => lst.deregister(registry) + MioListener::Uds(ref mut lst) => lst.deregister(registry), } } } From 89c9d943fb71ade25ac1f390061aafee42dc38d6 Mon Sep 17 00:00:00 2001 From: Jean Bouchard Date: Sat, 5 Feb 2022 20:53:12 -0500 Subject: [PATCH 3/3] revert the delete --- actix-server/src/accept.rs | 6 ------ actix-server/src/socket.rs | 27 --------------------------- 2 files changed, 33 deletions(-) diff --git a/actix-server/src/accept.rs b/actix-server/src/accept.rs index 664728fd06..9f7872f873 100644 --- a/actix-server/src/accept.rs +++ b/actix-server/src/accept.rs @@ -217,8 +217,6 @@ impl Accept { self.deregister_all(sockets); } - self.terminate_all(sockets); - return true; } @@ -332,10 +330,6 @@ impl Accept { .for_each(|(_, info)| self.deregister_logged(info)); } - fn terminate_all(&self, sockets: &mut [ServerSocketInfo]) { - sockets.iter().for_each(|s| s.lst.terminate()); - } - // Send connection to worker and handle error. fn send_connection(&mut self, conn: Conn) -> Result<(), Conn> { let next = self.next(); diff --git a/actix-server/src/socket.rs b/actix-server/src/socket.rs index adb165b8ac..85cfb14300 100644 --- a/actix-server/src/socket.rs +++ b/actix-server/src/socket.rs @@ -41,20 +41,6 @@ impl MioListener { MioListener::Uds(ref lst) => lst.accept().map(|(stream, _)| MioStream::Uds(stream)), } } - - pub(crate) fn terminate(&self) { - match *self { - MioListener::Tcp(_) => (), - #[cfg(unix)] - MioListener::Uds(ref lst) => { - if let Ok(addr) = lst.local_addr() { - if let Some(path) = addr.as_pathname() { - let _ = std::fs::remove_file(path); - } - } - } - } - } } impl Source for MioListener { @@ -274,17 +260,4 @@ mod tests { assert!(format!("{}", lst).contains("/tmp/sock.xxxxx")); } } - - #[test] - #[cfg(unix)] - fn uds_terminate() { - let socket_path = std::path::Path::new("/tmp/sock.xxxx1"); - let _ = std::fs::remove_file(socket_path); - if let Ok(socket) = MioUnixListener::bind(socket_path) { - let listener = MioListener::Uds(socket); - assert!(socket_path.exists()); - listener.terminate(); - assert!(!socket_path.exists()); - } - } }