diff --git a/Cargo.lock b/Cargo.lock index a6c8b9b..945ef96 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1191,7 +1191,7 @@ dependencies = [ [[package]] name = "kcserver" -version = "0.1.59" +version = "0.1.60" dependencies = [ "anyhow", "async-channel", diff --git a/crates/kcserver/Cargo.toml b/crates/kcserver/Cargo.toml index b872a6c..1c9b976 100644 --- a/crates/kcserver/Cargo.toml +++ b/crates/kcserver/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "kcserver" -version = "0.1.59" +version = "0.1.60" rust-version.workspace = true edition.workspace = true license.workspace = true diff --git a/crates/kcserver/src/server.rs b/crates/kcserver/src/server.rs index ede539e..f9be064 100644 --- a/crates/kcserver/src/server.rs +++ b/crates/kcserver/src/server.rs @@ -330,7 +330,9 @@ async fn create_tcp_server( let builder = HttpBuilder::new(TokioExecutor::new()); // Use serve_connection_with_upgrades to support WebSocket upgrades if let Err(e) = builder.serve_connection_with_upgrades(io, &mut svc).await { - log::error!("Error serving connection: {}", e); + // Connection shutdown errors are common and expected when clients + // disconnect - only log at debug level to avoid noise + log::debug!("TCP connection ended ({}): {}", addr, e); } }); } @@ -354,7 +356,7 @@ async fn create_unix_server( log_level, true, socket_dir, - main_server_socket, + main_server_socket.clone(), ); let server = config.create_server(); @@ -365,6 +367,9 @@ async fn create_unix_server( let service = kallichore_api::server::context::MakeAddContext::<_, EmptyContext>::new(service); let service = Arc::new(service); + // Clone socket path for use in the async block + let socket_path_for_logging = main_server_socket.clone(); + // Create the server future that accepts connections on Unix domain socket let server_future = async move { loop { @@ -378,6 +383,7 @@ async fn create_unix_server( let io = TokioIo::new(stream); let make_service = service.clone(); + let socket_path = socket_path_for_logging.clone(); tokio::spawn(async move { // For Unix sockets, we use () as the target since there's no addr @@ -393,7 +399,10 @@ async fn create_unix_server( let builder = HttpBuilder::new(TokioExecutor::new()); // Use serve_connection_with_upgrades to support WebSocket upgrades if let Err(e) = builder.serve_connection_with_upgrades(io, &mut svc).await { - log::error!("Error serving Unix socket connection: {}", e); + // Connection shutdown errors are common and expected when clients + // disconnect - only log at debug level to avoid noise + let socket_info = socket_path.as_deref().unwrap_or("unknown"); + log::debug!("Unix socket connection ended ({}): {}", socket_info, e); } }); } @@ -464,7 +473,9 @@ async fn create_named_pipe_server( let builder = HttpBuilder::new(TokioExecutor::new()); // Use serve_connection_with_upgrades to support WebSocket upgrades if let Err(e) = builder.serve_connection_with_upgrades(io, &mut svc).await { - log::error!("Error serving named pipe connection: {}", e); + // Connection shutdown errors are common and expected when clients + // disconnect - only log at debug level to avoid noise + log::debug!("Named pipe connection ended: {}", e); } }); }