X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=server.c;h=beee2db19d2a346b9184b5a88393f5e520a80ec6;hb=dfe11fd1e8249a52c42f34c9e9e6b910ab6b05c5;hp=0954d4c3d7c81c7bfe1aa2a839b92645dc3863db;hpb=17e3531ad6dcd6d0d8f1191f7fe484a345f26f52;p=fio.git diff --git a/server.c b/server.c index 0954d4c3..beee2db1 100644 --- a/server.c +++ b/server.c @@ -1339,7 +1339,6 @@ static int fio_init_server_sock(void) memset(&addr, 0, sizeof(addr)); addr.sun_family = AF_UNIX; strcpy(addr.sun_path, bind_sock); - unlink(bind_sock); len = sizeof(addr.sun_family) + strlen(bind_sock) + 1; @@ -1395,6 +1394,7 @@ static int fio_init_server_connection(void) if (listen(sk, 0) < 0) { log_err("fio: listen: %s\n", strerror(errno)); + close(sk); return -1; } @@ -1567,6 +1567,22 @@ out: return ret; } +static void sig_int(int sig) +{ + if (bind_sock) + unlink(bind_sock); +} + +static void set_sig_handlers(void) +{ + struct sigaction act; + + memset(&act, 0, sizeof(act)); + act.sa_handler = sig_int; + act.sa_flags = SA_RESTART; + sigaction(SIGINT, &act, NULL); +} + static int fio_server(void) { int sk, ret; @@ -1580,6 +1596,8 @@ static int fio_server(void) if (sk < 0) return -1; + set_sig_handlers(); + ret = accept_loop(sk); close(sk);