mirror of
https://github.com/actix/actix-extras.git
synced 2024-11-30 18:34:36 +01:00
better sleep on error
This commit is contained in:
parent
692e11a584
commit
49f5c335f6
@ -8,6 +8,8 @@
|
|||||||
|
|
||||||
* Fix steraming response handling for http/2
|
* Fix steraming response handling for http/2
|
||||||
|
|
||||||
|
* Better sleep on error support
|
||||||
|
|
||||||
|
|
||||||
## 0.4.6 (2018-03-10)
|
## 0.4.6 (2018-03-10)
|
||||||
|
|
||||||
|
@ -741,10 +741,9 @@ fn start_accept_thread(
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
Err(err) => {
|
Err(ref e) if connection_error(e) => continue,
|
||||||
if err.kind() != io::ErrorKind::WouldBlock {
|
Err(e) => {
|
||||||
error!("Error accepting connection: {:?}", err);
|
error!("Error accepting connection: {:?}", e);
|
||||||
}
|
|
||||||
// sleep after error
|
// sleep after error
|
||||||
thread::sleep(sleep);
|
thread::sleep(sleep);
|
||||||
break
|
break
|
||||||
@ -818,3 +817,16 @@ fn create_tcp_listener(addr: net::SocketAddr, backlog: i32) -> io::Result<net::T
|
|||||||
builder.bind(addr)?;
|
builder.bind(addr)?;
|
||||||
Ok(builder.listen(backlog)?)
|
Ok(builder.listen(backlog)?)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// This function defines errors that are per-connection. Which basically
|
||||||
|
/// means that if we get this error from `accept()` system call it means
|
||||||
|
/// next connection might be ready to be accepted.
|
||||||
|
///
|
||||||
|
/// All other errors will incur a timeout before next `accept()` is performed.
|
||||||
|
/// The timeout is useful to handle resource exhaustion errors like ENFILE
|
||||||
|
/// and EMFILE. Otherwise, could enter into tight loop.
|
||||||
|
fn connection_error(e: &io::Error) -> bool {
|
||||||
|
e.kind() == io::ErrorKind::ConnectionRefused ||
|
||||||
|
e.kind() == io::ErrorKind::ConnectionAborted ||
|
||||||
|
e.kind() == io::ErrorKind::ConnectionReset
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user