aboutsummaryrefslogtreecommitdiff
path: root/server.c
diff options
context:
space:
mode:
Diffstat (limited to 'server.c')
-rw-r--r--server.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/server.c b/server.c
index 9b11e019..c02703b3 100644
--- a/server.c
+++ b/server.c
@@ -78,24 +78,22 @@ server_create_socket(void)
size = strlcpy(sa.sun_path, socket_path, sizeof sa.sun_path);
if (size >= sizeof sa.sun_path) {
errno = ENAMETOOLONG;
- fatal("socket failed");
+ return (-1);
}
unlink(sa.sun_path);
if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
- fatal("socket failed");
+ return (-1);
mask = umask(S_IXUSR|S_IXGRP|S_IRWXO);
if (bind(fd, (struct sockaddr *) &sa, SUN_LEN(&sa)) == -1)
- fatal("bind failed");
+ return (-1);
umask(mask);
if (listen(fd, 16) == -1)
- fatal("listen failed");
+ return (-1);
setblocking(fd, 0);
- server_update_socket();
-
return (fd);
}
@@ -156,6 +154,9 @@ server_start(int lockfd, char *lockfile)
#endif
server_fd = server_create_socket();
+ if (server_fd == -1)
+ fatal("couldn't create socket");
+ server_update_socket();
server_client_create(pair[1]);
unlink(lockfile);
@@ -388,6 +389,7 @@ server_add_accept(int timeout)
void
server_signal_callback(int sig, unused short events, unused void *data)
{
+ int fd;
switch (sig) {
case SIGTERM:
server_shutdown = 1;
@@ -398,8 +400,12 @@ server_signal_callback(int sig, unused short events, unused void *data)
break;
case SIGUSR1:
event_del(&server_ev_accept);
- close(server_fd);
- server_fd = server_create_socket();
+ fd = server_create_socket();
+ if (fd != -1) {
+ close(server_fd);
+ server_fd = fd;
+ server_update_socket();
+ }
server_add_accept(0);
break;
}