diff options
Diffstat (limited to 'src/server.c')
-rw-r--r-- | src/server.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/server.c b/src/server.c index 68fec90..632cb28 100644 --- a/src/server.c +++ b/src/server.c @@ -5,8 +5,15 @@ #include <string.h> #include <sys/socket.h> #include <sys/types.h> +#include <signal.h> #include <unistd.h> +static int socket_fd; + +void closeServer(int dummy) { + shutdown(socket_fd, 2); +} + int server_listen(server_t *server) { /* ** @@ -27,10 +34,19 @@ int server_listen(server_t *server) { struct sockaddr_in server_addr = {0}; + if (signal(SIGINT, closeServer) == SIG_ERR) { + printf("Could not set signal handler\n"); + return -1; + } + server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = htonl(INADDR_ANY); server_addr.sin_port = htons(8000); + if (setsockopt(server->listen_fd, SOL_SOCKET, SO_REUSEADDR,1,sizeof(1))) { + printf("Could not set SO_REUSEADDR on server socket, continuing\n"); + } + err = bind(server->listen_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)); if (err == -1) { @@ -39,6 +55,8 @@ int server_listen(server_t *server) { return err; } + socket_fd = server->listen_fd; + err = listen(server->listen_fd, 100); if (err == -1) { perror("listen"); |