mirror of
https://github.com/fafhrd91/actix-net
synced 2025-03-16 08:22:42 +01:00
do not remove the uds socket on pause
This commit is contained in:
parent
72481313cc
commit
4ab41440ad
@ -31,7 +31,7 @@ async fn run() -> io::Result<()> {
|
|||||||
let count = Arc::new(AtomicUsize::new(0));
|
let count = Arc::new(AtomicUsize::new(0));
|
||||||
|
|
||||||
let addr = ("127.0.0.1", 8080);
|
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
|
// 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
|
// CPU cores as the worker count. For this reason, the closure passed to bind needs to return
|
||||||
|
@ -217,6 +217,8 @@ impl Accept {
|
|||||||
self.deregister_all(sockets);
|
self.deregister_all(sockets);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self.terminate_all(sockets);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -330,6 +332,10 @@ impl Accept {
|
|||||||
.for_each(|(_, info)| self.deregister_logged(info));
|
.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.
|
// Send connection to worker and handle error.
|
||||||
fn send_connection(&mut self, conn: Conn) -> Result<(), Conn> {
|
fn send_connection(&mut self, conn: Conn) -> Result<(), Conn> {
|
||||||
let next = self.next();
|
let next = self.next();
|
||||||
|
@ -38,11 +38,28 @@ impl MioListener {
|
|||||||
match *self {
|
match *self {
|
||||||
MioListener::Tcp(ref lst) => lst.accept().map(|(stream, _)| MioStream::Tcp(stream)),
|
MioListener::Tcp(ref lst) => lst.accept().map(|(stream, _)| MioStream::Tcp(stream)),
|
||||||
#[cfg(unix)]
|
#[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 {
|
impl Source for MioListener {
|
||||||
fn register(
|
fn register(
|
||||||
&mut self,
|
&mut self,
|
||||||
@ -74,17 +91,7 @@ impl Source for MioListener {
|
|||||||
match *self {
|
match *self {
|
||||||
MioListener::Tcp(ref mut lst) => lst.deregister(registry),
|
MioListener::Tcp(ref mut lst) => lst.deregister(registry),
|
||||||
#[cfg(unix)]
|
#[cfg(unix)]
|
||||||
MioListener::Uds(ref mut lst) => {
|
MioListener::Uds(ref mut lst) => lst.deregister(registry)
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -270,4 +277,17 @@ mod tests {
|
|||||||
assert!(format!("{}", lst).contains("/tmp/sock.xxxxx"));
|
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());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user