chiark / gitweb /
server/admin.h: Consolidate address construction during resolution.
[tripe] / server / admin.c
index 8cb44a3c711fbb3611c0be662a939f898e606f13..c5fed8b0781cdfa7a0bb986f05e09893f6b0b26b 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);