diff options
-rw-r--r-- | src/network/lookup_name.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/network/lookup_name.c b/src/network/lookup_name.c index c4d994a1..aae0d95a 100644 --- a/src/network/lookup_name.c +++ b/src/network/lookup_name.c @@ -157,14 +157,17 @@ static int name_from_dns(struct address buf[static MAXADDRS], char canon[static if (__res_msend_rc(nq, qp, qlens, ap, alens, sizeof *abuf, conf) < 0) return EAI_SYSTEM; + for (i=0; i<nq; i++) { + if (alens[i] < 4 || (abuf[i][3] & 15) == 2) return EAI_AGAIN; + if ((abuf[i][3] & 15) == 3) return 0; + if ((abuf[i][3] & 15) != 0) return EAI_FAIL; + } + for (i=0; i<nq; i++) __dns_parse(abuf[i], alens[i], dns_parse_callback, &ctx); if (ctx.cnt) return ctx.cnt; - if (alens[0] < 4 || (abuf[0][3] & 15) == 2) return EAI_AGAIN; - if ((abuf[0][3] & 15) == 0) return EAI_NONAME; - if ((abuf[0][3] & 15) == 3) return 0; - return EAI_FAIL; + return EAI_NONAME; } static int name_from_dns_search(struct address buf[static MAXADDRS], char canon[static 256], const char *name, int family) |