Multi-client server, protocol versioning, streaming decompression fixes

This commit is contained in:
2026-07-16 13:59:41 +02:00
parent 07207cd71d
commit efb98d8964
8 changed files with 101 additions and 27 deletions
+24 -11
View File
@@ -1,6 +1,7 @@
#include "transport_tcp.h"
#include "log.h"
#include <arpa/inet.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -48,6 +49,7 @@ Server *server_create(int port) {
void server_delete(Server **server) {
if (server == NULL || *server == NULL) return;
close((*server)->file_descriptor);
free(*server);
*server = NULL;
}
@@ -55,22 +57,33 @@ void server_delete(Server **server) {
void server_listen(Server *server, void (*handler)(int file_descriptor)) {
log_message(LOG_LEVEL_INFO, "Start Listening on Port: %d",
server->address.sin_port);
if (listen(server->file_descriptor, 3) < 0) {
if (listen(server->file_descriptor, SOMAXCONN) < 0) {
perror("Could not listen on port!");
exit(EXIT_FAILURE);
}
int file_descriptor =
accept(server->file_descriptor, (struct sockaddr *)&server->address,
&server->address_length);
if (file_descriptor < 0) {
perror("Could not accept the connection");
exit(EXIT_FAILURE);
signal(SIGCHLD, SIG_IGN);
while (1) {
struct sockaddr_in client_addr;
socklen_t client_len = sizeof(client_addr);
int file_descriptor =
accept(server->file_descriptor, (struct sockaddr *)&client_addr,
&client_len);
if (file_descriptor < 0) {
perror("Could not accept the connection");
continue;
}
log_message(LOG_LEVEL_INFO, "Received Connection");
pid_t pid = fork();
if (pid == 0) {
close(server->file_descriptor);
handler(file_descriptor);
close(file_descriptor);
_exit(0);
}
close(file_descriptor);
}
log_message(LOG_LEVEL_INFO, "Received Connection");
handler(file_descriptor);
close(server->file_descriptor);
close(file_descriptor);
}
Client *client_create() {