From c446378817e4d215ffd69f452f846fc5278f7943 Mon Sep 17 00:00:00 2001 From: cflip Date: Sun, 9 Jul 2023 11:57:13 -0600 Subject: Gracefully shut down server when interrupted with Ctrl+C --- net.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'net.c') diff --git a/net.c b/net.c index 84d713b..438abcb 100644 --- a/net.c +++ b/net.c @@ -1,6 +1,7 @@ #include "net.h" #include +#include #include #include #include @@ -50,19 +51,26 @@ int net_init_server(int port) return sockfd; } -struct http_request net_next_request(int serverfd, int *clientfd) +int net_next_request(int serverfd, int *clientfd, struct http_request *req) { int connfd; char readbuf[CFWS_NET_MAXREAD]; - struct http_request req; connfd = accept(serverfd, NULL, NULL); + if (connfd == -1) { + /* EINVAL most likely indicates that the server socket was + * closed due to the user pressing Ctrl+C. */ + if (errno == EINVAL) + return 1; + perror("cfws: accept"); + return -1; + } /* Read and parse the HTTP request */ memset(readbuf, 0, CFWS_NET_MAXREAD); read(connfd, readbuf, CFWS_NET_MAXREAD - 1); - req = http_parse_request(readbuf); + *req = http_parse_request(readbuf); *clientfd = connfd; - return req; + return 0; } -- cgit v1.2.3