- if (eof || len > MAXPENDING)
- if (opts & OPT_POLL)
- err= adns_wait_poll(adns, &head->query, &answer, NULL);
- else
- err= adns_wait(adns, &head->query, &answer, NULL);
- else
- err= adns_check(adns, &head->query, &answer, NULL);
- if (err != EWOULDBLOCK) {
- printline(head->start, head->addr, head->rest,
- answer->status == adns_s_ok ? *answer->rrs.str : NULL);
- line= head; head= head->next;
- free(line); free(answer);
- len--;
+ while (head) {
+ if (opts & OPT_DEBUG)
+ msg("%d in queue; checking %.*s", len,
+ (int)(head->rest-head->addr), guard_null(head->addr));
+ if (eof || len >= maxpending) {
+ if (opts & OPT_POLL)
+ err= adns_wait_poll(adns, &head->query, &answer, NULL);
+ else
+ err= adns_wait(adns, &head->query, &answer, NULL);
+ } else {
+ err= adns_check(adns, &head->query, &answer, NULL);
+ }
+ if (err == EAGAIN) break;
+ if (err) {
+ fprintf(stderr, "%s: adns_wait/check: %s", progname, strerror(err));
+ exit(1);
+ }
+ printline(outf, head->start, head->addr, head->rest,
+ answer->status == adns_s_ok ? *answer->rrs.str : NULL);
+ line= head; head= head->next;
+ free(line);
+ free(answer);
+ len--;