server/tripe.c: Establish the stdio admin client early.
[tripe] / server / admin.c
index acdb973..6ff0dbf 100644 (file)
@@ -260,7 +260,9 @@ static void a_flush(int fd, unsigned mode, void *v)
  *
  *               * "?PEER" PEER -- peer's name
  *
- *               * "?ERRNO" ERRNO -- system error code
+ *               * "?ERR" CODE -- system error code
+ *
+ *               * "?ERRNO" -- system error code from @errno@
  *
  *               * "[!]..." ... -- @dstr_putf@-like string as single token
  */
@@ -303,7 +305,11 @@ void a_vformat(dstr *d, const char *fmt, va_list *ap)
        while (*av) u_quotify(d, *av++);
       } else if (strcmp(fmt, "?PEER") == 0)
        u_quotify(d, p_name(va_arg(*ap, peer *)));
-      else if (strcmp(fmt, "?ERRNO") == 0) {
+      else if (strcmp(fmt, "?ERR") == 0) {
+       int e = va_arg(*ap, int);
+       dstr_putf(d, " E%d", e);
+       u_quotify(d, strerror(e));
+      } else if (strcmp(fmt, "?ERRNO") == 0) {
        dstr_putf(d, " E%d", errno);
        u_quotify(d, strerror(errno));
       } else
@@ -2538,6 +2544,7 @@ again:
     if (errno != ECONNREFUSED)
       die(EXIT_FAILURE, "couldn't bind to address: %s", strerror(e));
     if (stat(sun.sun_path, &st)) {
+      if (errno == ENOENT) { close(fd); goto again; }
       die(EXIT_FAILURE, "couldn't stat `%s': %s",
          sun.sun_path, strerror(errno));
     }