server/admin.h: Consolidate address construction during resolution.
[tripe] / server / admin.c
index e39658e..c5fed8b 100644 (file)
@@ -1028,7 +1028,9 @@ static void a_resolved(struct hostent *h, void *v)
     r->func(r, ARES_FAIL);
   } else {
     T( trace(T_ADMIN, "admin: resop %s ok", BGTAG(r)); )
+    r->sa.sin.sin_family = AF_INET;
     memcpy(&r->sa.sin.sin_addr, h->h_addr, sizeof(struct in_addr));
+    r->sa.sin.sin_port = htons(r->port);
     r->func(r, ARES_OK);
   }
   sel_rmtimer(&r->t);
@@ -1130,7 +1132,7 @@ static void a_resolve(admin *a, admin_resop *r, const char *tag,
     a_fail(a, "invalid-port", "%lu", pt, A_END);
     goto fail;
   }
-  r->sa.sin.sin_port = htons(pt);
+  r->port = pt;
 
   /* --- Report backgrounding --- *
    *
@@ -1147,6 +1149,8 @@ static void a_resolve(admin *a, admin_resop *r, const char *tag,
 
   if (inet_aton(av[i], &r->sa.sin.sin_addr)) {
     T( trace(T_ADMIN, "admin: resop %s done the easy way", BGTAG(r)); )
+    r->sa.sin.sin_family = AF_INET;
+    r->sa.sin.sin_port = htons(r->port);
     func(r, ARES_OK);
     xfree(r->addr);
     a_bgrelease(&r->bg);
@@ -1848,7 +1852,6 @@ static void acmd_addr(admin *a, unsigned ac, char *av[])
 
   if ((p = a_findpeer(a, av[0])) != 0) {
     ad = p_addr(p);
-    assert(ad->sa.sa_family == AF_INET);
     a_info(a, "?ADDR", ad, A_END);
     a_ok(a);
   }