summaryrefslogtreecommitdiffstats
path: root/server.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicholas.marriott@gmail.com>2007-09-26 13:43:15 +0000
committerNicholas Marriott <nicholas.marriott@gmail.com>2007-09-26 13:43:15 +0000
commitfb39b22a2e7b7c12c56b26abc8ca18f38c2d7bda (patch)
tree758fbaec376b741c12ab0382ff31fea819256e45 /server.c
parent671694ac3037055c35521f438615e4ce9daafda3 (diff)
Cleanup part II: split up client stuff and ops. More to come.
Diffstat (limited to 'server.c')
-rw-r--r--server.c54
1 files changed, 16 insertions, 38 deletions
diff --git a/server.c b/server.c
index 21a35f4f..3c12543d 100644
--- a/server.c
+++ b/server.c
@@ -1,4 +1,4 @@
-/* $Id: server.c,v 1.12 2007-09-26 10:35:24 nicm Exp $ */
+/* $Id: server.c,v 1.13 2007-09-26 13:43:15 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -24,6 +24,7 @@
#include <errno.h>
#include <fcntl.h>
+#include <paths.h>
#include <poll.h>
#include <signal.h>
#include <stdio.h>
@@ -43,7 +44,7 @@
/* Client list. */
struct clients clients;
-int server_main(int);
+int server_main(char *, int);
void fill_windows(struct pollfd **);
void handle_windows(struct pollfd **);
void fill_clients(struct pollfd **);
@@ -52,21 +53,18 @@ struct client *accept_client(int);
void lost_client(struct client *);
void lost_window(struct window *);
-/* Fork and start server process. */
int
-server_start(void)
+server_start(char *path)
{
- mode_t mode;
- int fd;
struct sockaddr_un sa;
size_t sz;
pid_t pid;
- FILE *f;
- char *path;
+ mode_t mode;
+ int fd;
- /* Fork the server process. */
switch (pid = fork()) {
case -1:
+ log_warn("fork");
return (-1);
case 0:
break;
@@ -74,20 +72,15 @@ server_start(void)
return (0);
}
- /* Start logging to file. */
- if (debug_level > 0) {
- xasprintf(&path,
- "%s-server-%ld.log", __progname, (long) getpid());
- f = fopen(path, "w");
- log_open(f, LOG_DAEMON, debug_level);
- xfree(path);
- }
+ logfile("server");
+ setproctitle("server (%s)", path);
+
log_debug("server started, pid %ld", (long) getpid());
/* Create the socket. */
memset(&sa, 0, sizeof sa);
sa.sun_family = AF_UNIX;
- sz = strlcpy(sa.sun_path, socket_path, sizeof sa.sun_path);
+ sz = strlcpy(sa.sun_path, path, sizeof sa.sun_path);
if (sz >= sizeof sa.sun_path) {
errno = ENAMETOOLONG;
fatal("socket failed");
@@ -113,32 +106,17 @@ server_start(void)
fatal("daemon failed");
log_debug("server daemonised, pid now %ld", (long) getpid());
- setproctitle("server (%s)", socket_path);
- exit(server_main(fd));
+ exit(server_main(path, fd));
}
/* Main server loop. */
int
-server_main(int srv_fd)
+server_main(char *srv_path, int srv_fd)
{
struct pollfd *pfds, *pfd;
int nfds, mode;
- struct sigaction act;
-
- sigemptyset(&act.sa_mask);
- act.sa_flags = SA_RESTART;
-
- act.sa_handler = SIG_IGN;
- if (sigaction(SIGPIPE, &act, NULL) != 0)
- fatal("sigaction failed");
- if (sigaction(SIGUSR1, &act, NULL) != 0)
- fatal("sigaction failed");
- if (sigaction(SIGUSR2, &act, NULL) != 0)
- fatal("sigaction failed");
- if (sigaction(SIGINT, &act, NULL) != 0)
- fatal("sigaction failed");
- if (sigaction(SIGQUIT, &act, NULL) != 0)
- fatal("sigaction failed");
+
+ siginit();
ARRAY_INIT(&windows);
ARRAY_INIT(&clients);
@@ -192,7 +170,7 @@ server_main(int srv_fd)
}
close(srv_fd);
- unlink(socket_path);
+ unlink(srv_path);
return (0);
}