From 88fee91088d2f57a7a928fb3d5224253c639721b Mon Sep 17 00:00:00 2001 From: Azreyo <58790873+Azreyo@users.noreply.github.com> Date: Mon, 24 Nov 2025 20:03:01 +0000 Subject: [PATCH] Develop (#13) * Refactor carbon-server service in docker-compose.yml to use pre-built image and remove unnecessary build context and volume mounts * Enhance performance and security features: - Update compiler flags for better optimization and security. - Implement MIME type caching for improved response handling. - Introduce worker thread pool for efficient connection management. - Optimize socket settings for low latency and enhanced performance. - Add support for CPU affinity in worker threads. - Implement graceful shutdown for worker threads during cleanup. * Optimize HTTP response handling and increase request limits for improved performance * Add gzip compression support for HTTP responses * Implement Keep-Alive support for HTTP connections with timeout handling Why is it not merging like this huh --- src/server.c | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/src/server.c b/src/server.c index 411ff3f..dbf8daa 100644 --- a/src/server.c +++ b/src/server.c @@ -569,9 +569,23 @@ void *handle_http_client(void *arg) pthread_exit(NULL); } - char request_buffer[MAX_REQUEST_SIZE]; - memset(request_buffer, 0, MAX_REQUEST_SIZE); - ssize_t bytes_received = recv(client_socket, request_buffer, MAX_REQUEST_SIZE - 1, 0); + // Set socket timeout for Keep-Alive (5 seconds) + struct timeval timeout; + timeout.tv_sec = 5; + timeout.tv_usec = 0; + setsockopt(client_socket, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout)); + + int keep_alive_count = 0; + const int max_keep_alive = 100; + + // Keep-Alive loop: handle multiple requests on same connection + while (server_running && keep_alive_count < max_keep_alive) + { + keep_alive_count++; + + char request_buffer[MAX_REQUEST_SIZE]; + memset(request_buffer, 0, MAX_REQUEST_SIZE); + ssize_t bytes_received = recv(client_socket, request_buffer, MAX_REQUEST_SIZE - 1, 0); if (bytes_received > 0) { @@ -844,10 +858,16 @@ void *handle_http_client(void *arg) } done_serving: + continue; } else if (bytes_received < 0) { - HANDLE_ERROR("Error receiving request"); + break; + } + else if (bytes_received == 0) + { + break; + } } close(client_socket);