summaryrefslogtreecommitdiffstats
path: root/server.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicholas.marriott@gmail.com>2007-09-26 18:09:23 +0000
committerNicholas Marriott <nicholas.marriott@gmail.com>2007-09-26 18:09:23 +0000
commit302a35da85c223aae29b4d356787ee492c9b56d7 (patch)
tree3f9988645f29cad5e427e00bc29e4edbcaf60239 /server.c
parent65eeb7e421718e248790d858792fd820aabbdbe6 (diff)
Server function naming, still not happy with server stuff though.
Diffstat (limited to 'server.c')
-rw-r--r--server.c77
1 files changed, 38 insertions, 39 deletions
diff --git a/server.c b/server.c
index 3c12543d..814739c3 100644
--- a/server.c
+++ b/server.c
@@ -1,4 +1,4 @@
-/* $Id: server.c,v 1.13 2007-09-26 13:43:15 nicm Exp $ */
+/* $Id: server.c,v 1.14 2007-09-26 18:09:23 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -45,22 +45,23 @@
struct clients clients;
int server_main(char *, int);
-void fill_windows(struct pollfd **);
-void handle_windows(struct pollfd **);
-void fill_clients(struct pollfd **);
-void handle_clients(struct pollfd **);
-struct client *accept_client(int);
-void lost_client(struct client *);
-void lost_window(struct window *);
-
+void server_fill_windows(struct pollfd **);
+void server_handle_windows(struct pollfd **);
+void server_fill_clients(struct pollfd **);
+void server_handle_clients(struct pollfd **);
+struct client *server_accept_client(int);
+void server_lost_client(struct client *);
+void server_lost_window(struct window *);
+
+/* Fork new server. */
int
server_start(char *path)
{
struct sockaddr_un sa;
size_t sz;
pid_t pid;
- mode_t mode;
- int fd;
+ mode_t mask;
+ int fd, mode;
switch (pid = fork()) {
case -1:
@@ -74,10 +75,8 @@ server_start(char *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, path, sizeof sa.sun_path);
@@ -90,14 +89,19 @@ server_start(char *path)
if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
fatal("socket failed");
- mode = umask(S_IXUSR|S_IRWXG|S_IRWXO);
+ mask = umask(S_IXUSR|S_IRWXG|S_IRWXO);
if (bind(fd, (struct sockaddr *) &sa, SUN_LEN(&sa)) == -1)
fatal("bind failed");
- umask(mode);
+ umask(mask);
if (listen(fd, 16) == -1)
fatal("listen failed");
+ if ((mode = fcntl(fd, F_GETFL)) == -1)
+ fatal("fcntl failed");
+ if (fcntl(fd, F_SETFL, mode|O_NONBLOCK) == -1)
+ fatal("fcntl failed");
+
/*
* Detach into the background. This means the PID changes which will
* have to be fixed in some way at some point... XXX
@@ -113,8 +117,8 @@ server_start(char *path)
int
server_main(char *srv_path, int srv_fd)
{
- struct pollfd *pfds, *pfd;
- int nfds, mode;
+ struct pollfd *pfds, *pfd;
+ int nfds;
siginit();
@@ -122,11 +126,6 @@ server_main(char *srv_path, int srv_fd)
ARRAY_INIT(&clients);
ARRAY_INIT(&sessions);
- if ((mode = fcntl(srv_fd, F_GETFL)) == -1)
- fatal("fcntl failed");
- if (fcntl(srv_fd, F_SETFL, mode|O_NONBLOCK) == -1)
- fatal("fcntl failed");
-
pfds = NULL;
while (!sigterm) {
/* Initialise pollfd array. */
@@ -140,8 +139,8 @@ server_main(char *srv_path, int srv_fd)
pfd++;
/* Fill window and client sockets. */
- fill_windows(&pfd);
- fill_clients(&pfd);
+ server_fill_windows(&pfd);
+ server_fill_clients(&pfd);
/* Do the poll. */
if (poll(pfds, nfds, INFTIM) == -1) {
@@ -155,7 +154,7 @@ server_main(char *srv_path, int srv_fd)
if (pfd->revents & (POLLERR|POLLNVAL|POLLHUP))
fatalx("lost server socket");
if (pfd->revents & POLLIN) {
- accept_client(srv_fd);
+ server_accept_client(srv_fd);
continue;
}
pfd++;
@@ -165,8 +164,8 @@ server_main(char *srv_path, int srv_fd)
* windows, so windows must come first to avoid messing up by
* increasing the array size.
*/
- handle_windows(&pfd);
- handle_clients(&pfd);
+ server_handle_windows(&pfd);
+ server_handle_clients(&pfd);
}
close(srv_fd);
@@ -177,7 +176,7 @@ server_main(char *srv_path, int srv_fd)
/* Fill window pollfds. */
void
-fill_windows(struct pollfd **pfd)
+server_fill_windows(struct pollfd **pfd)
{
struct window *w;
u_int i;
@@ -197,7 +196,7 @@ fill_windows(struct pollfd **pfd)
/* Handle window pollfds. */
void
-handle_windows(struct pollfd **pfd)
+server_handle_windows(struct pollfd **pfd)
{
struct window *w;
u_int i;
@@ -206,12 +205,12 @@ handle_windows(struct pollfd **pfd)
for (i = 0; i < ARRAY_LENGTH(&windows); i++) {
if ((w = ARRAY_ITEM(&windows, i)) != NULL) {
if (window_poll(w, *pfd) != 0)
- lost_window(w);
+ server_lost_window(w);
else {
b = buffer_create(BUFSIZ);
window_output(w, b);
if (BUFFER_USED(b) != 0) {
- write_clients(w, MSG_OUTPUT,
+ server_write_clients(w, MSG_OUTPUT,
BUFFER_OUT(b), BUFFER_USED(b));
}
buffer_destroy(b);
@@ -223,7 +222,7 @@ handle_windows(struct pollfd **pfd)
/* Fill client pollfds. */
void
-fill_clients(struct pollfd **pfd)
+server_fill_clients(struct pollfd **pfd)
{
struct client *c;
u_int i;
@@ -243,7 +242,7 @@ fill_clients(struct pollfd **pfd)
/* Handle client pollfds. */
void
-handle_clients(struct pollfd *(*pfd))
+server_handle_clients(struct pollfd *(*pfd))
{
struct client *c;
u_int i;
@@ -251,7 +250,7 @@ handle_clients(struct pollfd *(*pfd))
for (i = 0; i < ARRAY_LENGTH(&clients); i++) {
if ((c = ARRAY_ITEM(&clients, i)) != NULL) {
if (buffer_poll((*pfd), c->in, c->out) != 0)
- lost_client(c);
+ server_lost_client(c);
else
server_msg_dispatch(c);
}
@@ -261,7 +260,7 @@ handle_clients(struct pollfd *(*pfd))
/* accept(2) and create new client. */
struct client *
-accept_client(int srv_fd)
+server_accept_client(int srv_fd)
{
struct client *c;
struct sockaddr_storage sa;
@@ -298,7 +297,7 @@ accept_client(int srv_fd)
/* Lost a client. */
void
-lost_client(struct client *c)
+server_lost_client(struct client *c)
{
u_int i;
@@ -315,7 +314,7 @@ lost_client(struct client *c)
/* Lost window: move clients on to next window. */
void
-lost_window(struct window *w)
+server_lost_window(struct window *w)
{
struct client *c;
struct session *s;
@@ -337,9 +336,9 @@ lost_window(struct window *w)
continue;
if (destroyed) {
c->session = NULL;
- write_client(c, MSG_EXIT, NULL, 0);
+ server_write_client(c, MSG_EXIT, NULL, 0);
} else
- changed_window(c);
+ server_window_changed(c);
}
}
}