From 8f5799211ca1aa2f6b79dfac7fb4cf7acb9fe9e9 Mon Sep 17 00:00:00 2001 From: Edward Shen Date: Thu, 22 Jul 2021 13:37:32 -0400 Subject: [PATCH] Try reserve port during startup --- src/main.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index 0e00bdd..40a66fe 100644 --- a/src/main.rs +++ b/src/main.rs @@ -87,7 +87,6 @@ async fn main() -> Result<(), Box> { // Logging and warnings // - // SimpleLogger::new().with_level(config.log_level).init()?; tracing_subscriber::fmt() .with_max_level(config.log_level) .init(); @@ -121,6 +120,13 @@ async fn main() -> Result<(), Box> { // HTTP Server init + // Try bind to provided port first + let port_reservation = std::net::TcpListener::bind(bind_address); + if let Err(e) = port_reservation { + error!("Failed to bind to port!"); + return Err(e.into()); + }; + let server = if OFFLINE_MODE.load(Ordering::Acquire) { ServerState::init_offline() } else { @@ -225,6 +231,10 @@ async fn main() -> Result<(), Box> { }) .shutdown_timeout(60); + // drop port reservation, might have a TOCTOU but it's not a big deal; this + // is just a best effort. + std::mem::drop(port_reservation); + if disable_tls { server.bind(bind_address)?.run().await?; } else {