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:
M | hermes.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);