From c2d4596e85428c8490d75f615bdededd92076e68 Mon Sep 17 00:00:00 2001 From: "Anna (Anya) Parker" <50943381+anna-parker@users.noreply.github.com> Date: Thu, 2 Oct 2025 17:50:41 +0200 Subject: [PATCH 1/3] feat(silo): set timeouts if the connection hangs --- src/silo/api/api.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/silo/api/api.cpp b/src/silo/api/api.cpp index 6c05cbe5a..0f38b950f 100644 --- a/src/silo/api/api.cpp +++ b/src/silo/api/api.cpp @@ -20,6 +20,9 @@ int Api::runApi(const silo::config::RuntimeConfig& runtime_config) { Poco::Net::SocketAddress address(runtime_config.api_options.port); Poco::Net::ServerSocket server_socket; + // Set timeouts to avoid hanging connections + server_socket.setReceiveTimeout(Poco::Timespan(30,0)); + server_socket.setSendTimeout(Poco::Timespan(120,0)); try { server_socket.bind(address, true); server_socket.listen(); @@ -32,6 +35,10 @@ int Api::runApi(const silo::config::RuntimeConfig& runtime_config) { auto* const poco_parameter = new Poco::Net::HTTPServerParams; + poco_parameter->setKeepAlive(true); + // close idle connections after 10 seconds + poco_parameter->setKeepAliveTimeout(Poco::Timespan(10, 0)); + SPDLOG_INFO("Using {} queued http connections", runtime_config.api_options.max_connections); poco_parameter->setMaxQueued(runtime_config.api_options.max_connections); From e87e32d3f05900012c9bfb63a6ba81b880ccccee Mon Sep 17 00:00:00 2001 From: "Anna (Anya) Parker" <50943381+anna-parker@users.noreply.github.com> Date: Mon, 6 Oct 2025 14:26:11 +0200 Subject: [PATCH 2/3] feat(silo): format --- src/silo/api/api.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/silo/api/api.cpp b/src/silo/api/api.cpp index 0f38b950f..da004fee4 100644 --- a/src/silo/api/api.cpp +++ b/src/silo/api/api.cpp @@ -21,8 +21,8 @@ int Api::runApi(const silo::config::RuntimeConfig& runtime_config) { Poco::Net::ServerSocket server_socket; // Set timeouts to avoid hanging connections - server_socket.setReceiveTimeout(Poco::Timespan(30,0)); - server_socket.setSendTimeout(Poco::Timespan(120,0)); + server_socket.setReceiveTimeout(Poco::Timespan(30, 0)); + server_socket.setSendTimeout(Poco::Timespan(120, 0)); try { server_socket.bind(address, true); server_socket.listen(); @@ -35,10 +35,6 @@ int Api::runApi(const silo::config::RuntimeConfig& runtime_config) { auto* const poco_parameter = new Poco::Net::HTTPServerParams; - poco_parameter->setKeepAlive(true); - // close idle connections after 10 seconds - poco_parameter->setKeepAliveTimeout(Poco::Timespan(10, 0)); - SPDLOG_INFO("Using {} queued http connections", runtime_config.api_options.max_connections); poco_parameter->setMaxQueued(runtime_config.api_options.max_connections); From 1f44dffa119b19eb5d19bede8508132c737e2460 Mon Sep 17 00:00:00 2001 From: "Anna (Anya) Parker" <50943381+anna-parker@users.noreply.github.com> Date: Mon, 6 Oct 2025 17:25:30 +0200 Subject: [PATCH 3/3] feat(silo): fix --- src/silo/api/api.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/silo/api/api.cpp b/src/silo/api/api.cpp index da004fee4..30a8baa80 100644 --- a/src/silo/api/api.cpp +++ b/src/silo/api/api.cpp @@ -20,12 +20,12 @@ int Api::runApi(const silo::config::RuntimeConfig& runtime_config) { Poco::Net::SocketAddress address(runtime_config.api_options.port); Poco::Net::ServerSocket server_socket; - // Set timeouts to avoid hanging connections - server_socket.setReceiveTimeout(Poco::Timespan(30, 0)); - server_socket.setSendTimeout(Poco::Timespan(120, 0)); try { server_socket.bind(address, true); server_socket.listen(); + // Set timeouts to avoid hanging connections + server_socket.setReceiveTimeout(Poco::Timespan(30, 0)); + server_socket.setSendTimeout(Poco::Timespan(120, 0)); } catch (const Poco::Net::NetException& e) { SPDLOG_ERROR( "Failed to bind to port {}: {}", runtime_config.api_options.port, e.displayText()