From 07f148ed4e5f2d03b655fcdbeb018c0ad1bebde1 Mon Sep 17 00:00:00 2001 From: spinline Date: Tue, 3 Feb 2026 21:49:29 +0300 Subject: [PATCH] fix(backend): handle port binding errors gracefully instead of panicking --- backend/src/main.rs | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/backend/src/main.rs b/backend/src/main.rs index 5063b51..98301e4 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -167,7 +167,20 @@ async fn main() { .with_state(app_state); let addr = SocketAddr::from(([0, 0, 0, 0], args.port)); - let listener = tokio::net::TcpListener::bind(addr).await.unwrap(); + tracing::info!("Backend attempting to listen on {}", addr); + let listener = match tokio::net::TcpListener::bind(addr).await { + Ok(l) => l, + Err(e) => { + tracing::error!("FATAL: Failed to bind to address {}: {}", addr, e); + if e.kind() == std::io::ErrorKind::AddrInUse { + tracing::error!("HINT: Port {} is already in use. Stop the existing process or use --port to specify a different port.", args.port); + } + std::process::exit(1); + } + }; tracing::info!("Backend listening on {}", addr); - axum::serve(listener, app).await.unwrap(); + if let Err(e) = axum::serve(listener, app).await { + tracing::error!("Server error: {}", e); + std::process::exit(1); + } }