diff --git a/src/net/sessions/outbound_session.rs b/src/net/sessions/outbound_session.rs index b0840ac7f..1ca442aa8 100644 --- a/src/net/sessions/outbound_session.rs +++ b/src/net/sessions/outbound_session.rs @@ -95,24 +95,33 @@ impl OutboundSession { let inbound_addr = self.p2p().settings().inbound; loop { - match hosts.load_single().await { - Some(addr) => match inbound_addr { - Some(inbound_addr) => { - if inbound_addr != addr { - return Ok(addr); - } - } - None => { - return Ok(addr); - } - }, - None => { - error!( - "Hosts address pool is empty. Closing connect slot #{}", - slot_number - ); - return Err(NetError::ServiceStopped); - } + let addr = hosts.load_single().await; + + if addr.is_none() { + error!( + "Hosts address pool is empty. Closing connect slot #{}", + slot_number + ); + return Err(NetError::ServiceStopped); + } + let addr = addr.unwrap(); + + if Self::addr_is_inbound(&addr, &inbound_addr) { + continue; + } + + return Ok(addr); + } + } + + fn addr_is_inbound(addr: &SocketAddr, inbound_addr: &Option) -> bool { + match inbound_addr { + Some(inbound_addr) => { + inbound_addr == addr + } + // No inbound listening address configured + None => { + false } } }