diff --git a/dash-spv/src/network/manager.rs b/dash-spv/src/network/manager.rs index 1f4232cc6..fe05ce9f3 100644 --- a/dash-spv/src/network/manager.rs +++ b/dash-spv/src/network/manager.rs @@ -295,6 +295,7 @@ impl PeerNetworkManager { } Err(e) => { log::warn!("Handshake failed with {}: {}", addr, e); + pool.remove_peer(&addr).await; // Update reputation for handshake failure reputation_manager .update_reputation( @@ -310,6 +311,7 @@ impl PeerNetworkManager { } Err(e) => { log::debug!("Failed to connect to {}: {}", addr, e); + pool.remove_peer(&addr).await; // Minor reputation penalty for connection failure reputation_manager .update_reputation( diff --git a/dash-spv/src/network/pool.rs b/dash-spv/src/network/pool.rs index db690a3a2..09b3024b6 100644 --- a/dash-spv/src/network/pool.rs +++ b/dash-spv/src/network/pool.rs @@ -61,8 +61,9 @@ impl PeerPool { Ok(()) } - /// Remove a peer from the pool + /// Remove a peer from the pool and clear connecting state pub async fn remove_peer(&self, addr: &SocketAddr) -> Option>> { + self.connecting.write().await.remove(addr); let removed = self.peers.write().await.remove(addr); if removed.is_some() { log::info!("Removed peer {}", addr);