chiark / gitweb /
server/: Introduce accessor functions for reading and writing port numbers.
[tripe] / server / admin.c
index 8cb44a3c711fbb3611c0be662a939f898e606f13..0ec187ce5e581bd21df335b8063f756313c393f1 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));
+    setport(&r->sa, r->port);
     r->func(r, ARES_OK);
   }
   sel_rmtimer(&r->t);
@@ -1111,7 +1113,6 @@ static void a_resolve(admin *a, admin_resop *r, const char *tag,
     a_fail(a, "bad-addr-syntax", "[inet] ADDRESS [PORT]", A_END);
     goto fail;
   }
-  r->sa.sin.sin_family = AF_INET;
   r->addr = xstrdup(av[i]);
   if (!av[i + 1])
     pt = TRIPE_PORT;
@@ -1130,7 +1131,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 +1148,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;
+    setport(&r->sa, r->port);
     func(r, ARES_OK);
     xfree(r->addr);
     a_bgrelease(&r->bg);