src/server.c

changeset 94
864f59271974
parent 92
84e0dec5db16
--- 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;
     }

mercurial