hermes

HTTP GET/HEAD-only web server for static content.
git clone git://git.francescosaccone.com/hermes
Log | Files | Refs | README | LICENSE

commit 5d0ed979c23c2b7d4b86cf7280b54abe4f8f2d56
parent 18cb73719f6b168ce83a30a7b785528abbe75c7b
Author: Francesco Saccone <francesco@francescosaccone.com>
Date:   Mon, 31 Mar 2025 15:35:59 +0200

fix: do not fork

The server did not run: the program didn't listen, it returned
immediately. I'll probably find a better way of dropping
privileges or learn more about fork().

Signed-off-by: Francesco Saccone <francesco@francescosaccone.com>

Diffstat:
Mhermes.c | 45++++++++++++++++-----------------------------
1 file changed, 16 insertions(+), 29 deletions(-)

diff --git a/hermes.c b/hermes.c @@ -3,8 +3,6 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> -#include <sys/wait.h> -#include <unistd.h> #include "socket.h" #include "utils.h" @@ -104,40 +102,29 @@ main(int argc, char *argv[]) { server_socket_fd = create_socket(port); - switch (fork()) { - case -1: - print_error("error: could not fork process."); - break; - case 0: - /* Child process */ + while (1) { + int client_socket_fd, + buffer_size = 104857600 * sizeof(char); /* i.e. 100 MiB */ + char *buffer = malloc(buffer_size); - while (1) { - int client_socket_fd, - buffer_size = 104857600 * sizeof(char); /* i.e. 100 MiB */ - char *buffer = malloc(buffer_size); + client_socket_fd = accept_client(server_socket_fd); - client_socket_fd = accept_client(server_socket_fd); - - if (client_socket_fd == -1) { - free(buffer); - close_socket(client_socket_fd); - continue; - } - - if (read_client_request(client_socket_fd, - buffer, - buffer_size) == -1) { - free(buffer); - close_socket(client_socket_fd); - continue; - } + if (client_socket_fd == -1) { + free(buffer); + close_socket(client_socket_fd); + continue; + } + if (read_client_request(client_socket_fd, + buffer, + buffer_size) == -1) { free(buffer); close_socket(client_socket_fd); + continue; } - break; - default: + free(buffer); + close_socket(client_socket_fd); } close_socket(server_socket_fd);