--- a/src/server.c Sun Mar 29 13:26:00 2026 +0200 +++ b/src/server.c Sun Mar 29 15:17:28 2026 +0200 @@ -35,19 +35,38 @@ #include <errno.h> #include <string.h> #include <stdlib.h> +#include <unistd.h> +#include <signal.h> -static int server_open(Server *server, short port) { +static int server_fd = -1; +static void interrupt_listen(int sig) { + if (server_fd > -1) { + // this interrupts + close(server_fd); + } +} + +static int server_open(Server *server, Settings *settings) { printw("\nListening for client...\n"); refresh(); - if (net_create(server, port)) { + if (settings->usedomainsocket + ? net_create_sock(server, settings->serverhost) + : net_create_tcp(server, settings->port)) { addstr("Server creation failed"); return 1; } + // allow Ctrl+C to interrupt the listening process + server_fd = server->fd; + signal(SIGINT, interrupt_listen); + if (net_listen(server)) { - addstr("Listening for client failed"); + addstr("Listening for client failed or interrupted"); return 1; } + + // restore default action + signal(SIGINT, SIG_DFL); return 0; } @@ -97,7 +116,7 @@ } } - if (server_open(&server, settings->port)) { + if (server_open(&server, settings)) { net_destroy(&server); return 1; }