diff --git a/actix-server/CHANGES.md b/actix-server/CHANGES.md index 497b6449..be59f125 100644 --- a/actix-server/CHANGES.md +++ b/actix-server/CHANGES.md @@ -2,9 +2,11 @@ ## Unreleased - 2021-xx-xx * Hidden `ServerBuilder::start` method has been removed. Use `ServerBuilder::run`. [#246] +* Add retry for EINTR(`io::Interrupted`) in `Accept`'s poll loop. [#264] * Add `ServerBuilder::worker_max_blocking_threads` for customize blocking thread pool. [#265] [#246]: https://github.com/actix/actix-net/pull/246 +[#264]: https://github.com/actix/actix-net/pull/264 [#265]: https://github.com/actix/actix-net/pull/265 diff --git a/actix-server/src/accept.rs b/actix-server/src/accept.rs index a52184d9..c8c1da47 100644 --- a/actix-server/src/accept.rs +++ b/actix-server/src/accept.rs @@ -161,9 +161,16 @@ impl Accept { let mut events = mio::Events::with_capacity(128); loop { - self.poll - .poll(&mut events, None) - .unwrap_or_else(|e| panic!("Poll error: {}", e)); + if let Err(e) = self.poll.poll(&mut events, None) { + match e.kind() { + std::io::ErrorKind::Interrupted => { + continue; + } + _ => { + panic!("Poll error: {}", e); + } + } + } for event in events.iter() { let token = event.token();