play: Convert com_quit() to lopsub.
[paraslash.git] / server.c
index ae8848b6856732ae7d1d7fb034953f64b682aad1..a0eb50e2308e0a77ab4bc142cb2da845229bea11 100644 (file)
--- a/server.c
+++ b/server.c
@@ -18,7 +18,7 @@
  *     - Buffer trees: \ref buffer_tree.h,
  *     - Sideband API: \ref sideband.h,
  *     - Crypto: \ref crypt.h, \ref crypt_backend.h,
- *     - Error subsystem: \ref error.h, \ref error2.c,
+ *     - Error subsystem: \ref error.h,
  *     - Inter process communication: \ref ipc.h,
  *     - Forward error correction: \ref fec.h,
  *     - Daemons: \ref daemon.h,
@@ -40,6 +40,7 @@
 #include <arpa/inet.h>
 #include <sys/un.h>
 #include <netdb.h>
+#include <lopsub.h>
 
 #include "para.h"
 #include "error.h"
 #include "ggo.h"
 #include "version.h"
 
-__printf_2_3 void (*para_log)(int, const char*, ...) = daemon_log;
+/** Array of error strings. */
+DEFINE_PARA_ERRLIST;
 
-/** Define the array of error lists needed by para_server. */
-INIT_SERVER_ERRLISTS;
+__printf_2_3 void (*para_log)(int, const char*, ...) = daemon_log;
 
 /** Shut down non-authorized connections after that many seconds. */
 #define ALARM_TIMEOUT 10
@@ -411,8 +412,9 @@ static int init_afs(int argc, char **argv)
 {
        int ret, afs_server_socket[2];
        pid_t afs_pid;
+       char c;
 
-       ret = socketpair(PF_UNIX, SOCK_DGRAM, 0, afs_server_socket);
+       ret = socketpair(PF_UNIX, SOCK_STREAM, 0, afs_server_socket);
        if (ret < 0)
                exit(EXIT_FAILURE);
        get_random_bytes_or_die((unsigned char *)&afs_socket_cookie,
@@ -422,6 +424,7 @@ static int init_afs(int argc, char **argv)
                exit(EXIT_FAILURE);
        if (afs_pid == 0) { /* child (afs) */
                int i;
+
                for (i = argc - 1; i >= 0; i--)
                        memset(argv[i], 0, strlen(argv[i]));
                sprintf(argv[0], "para_server (afs)");
@@ -430,6 +433,10 @@ static int init_afs(int argc, char **argv)
        }
        mmd->afs_pid = afs_pid;
        close(afs_server_socket[1]);
+       if (read(afs_server_socket[0], &c, 1) <= 0) {
+               PARA_EMERG_LOG("early afs exit\n");
+               exit(EXIT_FAILURE);
+       }
        ret = mark_fd_nonblocking(afs_server_socket[0]);
        if (ret < 0)
                exit(EXIT_FAILURE);
@@ -531,7 +538,7 @@ out:
        prev_uptime = uptime;
        prev_events = mmd->events;
        mmd->vss_status_flags = mmd->new_vss_status_flags;
-       PARA_DEBUG_LOG("%d events, forcing status update\n", mmd->events);
+       PARA_DEBUG_LOG("%u events, forcing status update\n", mmd->events);
        killpg(0, SIGUSR1);
 }