server/: Issue `WARN' messages for (most) initialization errors.
[tripe] / server / tripe.c
index 60eaf8f..93d40b9 100644 (file)
@@ -292,10 +292,7 @@ int main(int argc, char *argv[])
   rand_noisesrc(RAND_GLOBAL, &noise_source);
   rand_seed(RAND_GLOBAL, MAXHASHSZ);
   signal(SIGPIPE, SIG_IGN);
-  for (i = 0; tunnels[i]; i++)
-    tunnels[i]->init();
-  p_init();
-  p_bind(ailist); freeaddrinfo(ailist);
+
   if (!(f & f_daemon)) {
     af = AF_WARN;
 #ifndef NTRACE
@@ -304,8 +301,14 @@ int main(int argc, char *argv[])
     if (f & f_foreground)
       af |= AF_FOREGROUND;
     a_create(STDIN_FILENO, STDOUT_FILENO, af);
+    a_switcherr();
   }
 
+  p_init();
+  for (i = 0; tunnels[i]; i++)
+    tunnels[i]->init();
+  p_bind(ailist); freeaddrinfo(ailist);
+
   for (i = 0; tunnels[i]; i++) {
     if (tunnels[i]->flags&TUNF_PRIVOPEN) {
       ps_split(f & f_daemon);
@@ -316,14 +319,16 @@ int main(int argc, char *argv[])
   a_init();
   a_signals();
   a_listen(csock, u, g, csockmode);
-  a_switcherr();
   u_setugid(u, g);
   km_init(kr_priv, kr_pub, tag_priv);
   kx_init();
   if (f & f_daemon) {
-    if (daemonize())
-      die(EXIT_FAILURE, "couldn't become a daemon: %s", strerror(errno));
+    if (daemonize()) {
+      a_warn("SERVER", "daemon-error", "?ERRNO", A_END);
+      exit(EXIT_FAILURE);
+    }
     a_daemon();
+    a_switcherr();
   }
 
   tv.tv_sec = time(0) + T_INTERVAL;