chiark / gitweb /
server/admin.c: Tweak tracing of background resolver jobs.
[tripe] / server / admin.c
index aafe0b9c8c69b896c1e597be48d0f5ef7c2fc4d6..e39658ef0acc928a929c4ccc76eaae0b3064cf03 100644 (file)
@@ -1020,12 +1020,14 @@ static void a_resolved(struct hostent *h, void *v)
 {
   admin_resop *r = v;
 
-  T( trace(T_ADMIN, "admin: resop %s resolved", BGTAG(r)); )
   QUICKRAND;
   if (!h) {
+    T( trace(T_ADMIN, "admin: resop %s failed: %s",
+            BGTAG(r), hstrerror(h_errno)); )
     a_bgfail(&r->bg, "resolve-error", "%s", r->addr, A_END);
     r->func(r, ARES_FAIL);
   } else {
+    T( trace(T_ADMIN, "admin: resop %s ok", BGTAG(r)); )
     memcpy(&r->sa.sin.sin_addr, h->h_addr, sizeof(struct in_addr));
     r->func(r, ARES_OK);
   }
@@ -1666,7 +1668,24 @@ static void acmd_warn(admin *a, unsigned ac, char *av[])
   { alertcmd(a, AF_WARN, AF_WARN, "WARN", av); }
 
 static void acmd_port(admin *a, unsigned ac, char *av[])
-  { a_info(a, "%u", p_port(), A_END); a_ok(a); }
+{
+  int i;
+
+  if (ac) {
+    for (i = 0; i < NADDRFAM; i++)
+      if (mystrieq(av[0], aftab[i].name)) goto found;
+    a_fail(a, "unknown-address-family", "%s", av[0], A_END);
+    return;
+  found:
+    assert(udpsock[i].fd >= 0);
+  } else {
+    for (i = 0; i < NADDRFAM; i++)
+      if (udpsock[i].fd >= 0) goto found;
+    abort();
+  }
+  a_info(a, "%u", p_port(i), A_END);
+  a_ok(a);
+}
 
 static void acmd_daemon(admin *a, unsigned ac, char *av[])
 {
@@ -1977,7 +1996,7 @@ static const acmd acmdtab[] = {
   { "notify",  "MESSAGE ...",          1,      0xffff, acmd_notify },
   { "peerinfo",        "PEER",                 1,      1,      acmd_peerinfo },
   { "ping",    "[OPTIONS] PEER",       1,      0xffff, acmd_ping },
-  { "port",    0,                      0,      0,      acmd_port },
+  { "port",    "[FAMILY]",             0,      1,      acmd_port },
   { "quit",    0,                      0,      0,      acmd_quit },
   { "reload",  0,                      0,      0,      acmd_reload },
   { "servinfo",        0,                      0,      0,      acmd_servinfo },
@@ -2361,7 +2380,6 @@ again:
 
   sig_add(&s_term, SIGTERM, a_sigdie, 0);
   sig_add(&s_hup, SIGHUP, a_sighup, 0);
-  signal(SIGPIPE, SIG_IGN);
   sigaction(SIGINT, 0, &sa);
   if (sa.sa_handler != SIG_IGN)
     sig_add(&s_int, SIGINT, a_sigdie, 0);