X-Git-Url: https://git.distorted.org.uk/~mdw/adns/blobdiff_plain/d942707de2dd9809338882f09a9f23316dc8be36..680003740eaac3b9fb876dc1ac4d321942b451f0:/src/setup.c?ds=inline diff --git a/src/setup.c b/src/setup.c index 8604f8e..ba80f14 100644 --- a/src/setup.c +++ b/src/setup.c @@ -461,7 +461,8 @@ static int init_begin(adns_state *ads_r, adns_initflags flags, FILE *diagfile) { ads->iflags= flags; ads->diagfile= diagfile; ads->configerrno= 0; - LIST_INIT(ads->timew); + LIST_INIT(ads->udpw); + LIST_INIT(ads->tcpw); LIST_INIT(ads->childw); LIST_INIT(ads->output); ads->forallnext= 0; @@ -469,6 +470,7 @@ static int init_begin(adns_state *ads_r, adns_initflags flags, FILE *diagfile) { ads->udpsocket= ads->tcpsocket= -1; adns__vbuf_init(&ads->tcpsend); adns__vbuf_init(&ads->tcprecv); + ads->tcprecv_skip= 0; ads->nservers= ads->nsortlist= ads->nsearchlist= ads->tcpserver= 0; ads->searchndots= 1; ads->tcpstate= server_disconnected; @@ -515,7 +517,7 @@ static void init_abort(adns_state ads) { free(ads); } -int adns_init(adns_state *ads_r, adns_initflags flags, FILE *diagfile) { +int adns_init(adns_state *ads_r, int flags, FILE *diagfile) { adns_state ads; const char *res_options, *adns_res_options; int r; @@ -555,7 +557,7 @@ int adns_init(adns_state *ads_r, adns_initflags flags, FILE *diagfile) { return 0; } -int adns_init_strcfg(adns_state *ads_r, adns_initflags flags, +int adns_init_strcfg(adns_state *ads_r, int flags, FILE *diagfile, const char *configtext) { adns_state ads; int r; @@ -579,7 +581,8 @@ int adns_init_strcfg(adns_state *ads_r, adns_initflags flags, void adns_finish(adns_state ads) { adns__consistency(ads,0,cc_entex); for (;;) { - if (ads->timew.head) adns_cancel(ads->timew.head); + if (ads->udpw.head) adns_cancel(ads->udpw.head); + else if (ads->tcpw.head) adns_cancel(ads->tcpw.head); else if (ads->childw.head) adns_cancel(ads->childw.head); else if (ads->output.head) adns_cancel(ads->output.head); else break; @@ -594,7 +597,8 @@ void adns_finish(adns_state ads) { void adns_forallqueries_begin(adns_state ads) { adns__consistency(ads,0,cc_entex); ads->forallnext= - ads->timew.head ? ads->timew.head : + ads->udpw.head ? ads->udpw.head : + ads->tcpw.head ? ads->tcpw.head : ads->childw.head ? ads->childw.head : ads->output.head; } @@ -609,12 +613,15 @@ adns_query adns_forallqueries_next(adns_state ads, void **context_r) { if (!qu) return 0; if (qu->next) { nqu= qu->next; - } else if (qu == ads->timew.tail) { - if (ads->childw.head) { - nqu= ads->childw.head; - } else { - nqu= ads->output.head; - } + } else if (qu == ads->udpw.tail) { + nqu= + ads->tcpw.head ? ads->tcpw.head : + ads->childw.head ? ads->childw.head : + ads->output.head; + } else if (qu == ads->tcpw.tail) { + nqu= + ads->childw.head ? ads->childw.head : + ads->output.head; } else if (qu == ads->childw.tail) { nqu= ads->output.head; } else { @@ -626,8 +633,3 @@ adns_query adns_forallqueries_next(adns_state ads, void **context_r) { if (context_r) *context_r= qu->ctx.ext; return qu; } - -void adns__checkqueues(adns_state ads) { - adns_forallqueries_begin(ads); - while (adns_forallqueries_next(ads,0)); -}