From 1ba81191f6699e49d9bd9037a54aef533c1bfac5 Mon Sep 17 00:00:00 2001 From: Matthias Seitz Date: Wed, 28 Dec 2022 12:43:02 +0100 Subject: [PATCH] perf(net): backoff on IO error (#633) --- crates/net/eth-wire/src/errors/eth.rs | 8 ++++++++ crates/net/network/src/error.rs | 18 +++++++++--------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/crates/net/eth-wire/src/errors/eth.rs b/crates/net/eth-wire/src/errors/eth.rs index 76859a55d4..6090fa40d7 100644 --- a/crates/net/eth-wire/src/errors/eth.rs +++ b/crates/net/eth-wire/src/errors/eth.rs @@ -26,6 +26,14 @@ impl EthStreamError { None } } + + /// Returns the [io::Error] if it was caused by IO + pub fn as_io(&self) -> Option<&io::Error> { + if let EthStreamError::P2PStreamError(P2PStreamError::Io(io)) = self { + return Some(io) + } + None + } } impl From for EthStreamError { diff --git a/crates/net/network/src/error.rs b/crates/net/network/src/error.rs index 76c9096afd..0eee7a27a7 100644 --- a/crates/net/network/src/error.rs +++ b/crates/net/network/src/error.rs @@ -95,15 +95,15 @@ impl SessionError for EthStreamError { EthStreamError::P2PStreamError(P2PStreamError::HandshakeError( P2PHandshakeError::NoResponse )) - ) || self - .as_disconnected() - .map(|reason| { - matches!( - reason, - DisconnectReason::TooManyPeers | DisconnectReason::AlreadyConnected - ) - }) - .unwrap_or_default() + ) || self.as_io().is_some() || + self.as_disconnected() + .map(|reason| { + matches!( + reason, + DisconnectReason::TooManyPeers | DisconnectReason::AlreadyConnected + ) + }) + .unwrap_or_default() } }