From 3ecb390b101cf37afa82b0093a9210ed214db0c3 Mon Sep 17 00:00:00 2001 From: Greg Fitzgerald Date: Wed, 16 Sep 2020 17:31:58 -0600 Subject: [PATCH] Fix panic in BanksServer (#12293) Fixes #12167 --- banks-server/src/banks_server.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/banks-server/src/banks_server.rs b/banks-server/src/banks_server.rs index 1c66c8f595..6b1cafb66f 100644 --- a/banks-server/src/banks_server.rs +++ b/banks-server/src/banks_server.rs @@ -23,7 +23,7 @@ use solana_sdk::{ use std::{ collections::HashMap, io, - net::SocketAddr, + net::{Ipv4Addr, SocketAddr}, sync::{ atomic::AtomicBool, mpsc::{channel, Receiver, Sender}, @@ -240,7 +240,12 @@ pub async fn start_tcp_server( .filter_map(|r| future::ready(r.ok())) .map(server::BaseChannel::with_defaults) // Limit channels to 1 per IP. - .max_channels_per_key(1, |t| t.as_ref().peer_addr().unwrap().ip()) + .max_channels_per_key(1, |t| { + t.as_ref() + .peer_addr() + .map(|x| x.ip()) + .unwrap_or_else(|_| Ipv4Addr::new(0, 0, 0, 0).into()) + }) // serve is generated by the service attribute. It takes as input any type implementing // the generated Banks trait. .map(move |chan| {