From be4824c9559e9119eda78df0c4a9d80368555a65 Mon Sep 17 00:00:00 2001 From: Tyera Eulberg Date: Sat, 18 Aug 2018 23:07:07 -0600 Subject: [PATCH] Add custom panic hook for RPC port bind --- src/rpc.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/rpc.rs b/src/rpc.rs index b1bcee5a42..81f354c7b3 100644 --- a/src/rpc.rs +++ b/src/rpc.rs @@ -8,6 +8,7 @@ use service::Service; use signature::{Pubkey, Signature}; use std::mem; use std::net::SocketAddr; +use std::panic; use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::Arc; use std::thread::{self, Builder, JoinHandle}; @@ -28,6 +29,10 @@ impl JsonRpcService { let rpc = RpcSolImpl; io.extend_with(rpc.to_delegate()); + panic::set_hook(Box::new(move |_| { + warn!("JSON RPC service unavailable: unable to bind to RPC port {}. \nMake sure this port is not already in use by another application", rpc_addr.port()); + })); + let server = ServerBuilder::with_meta_extractor(io, move |_req: &hyper::Request| Meta { request_processor: request_processor.clone(), @@ -37,6 +42,7 @@ impl JsonRpcService { ])) .start_http(&rpc_addr) .unwrap(); + let _ = panic::take_hook(); loop { if exit.load(Ordering::Relaxed) { server.close();