const char *word;
char *ep;
unsigned long v;
- int l;
+ int i,l;
if (!buf) return;
}
continue;
}
+ if (l>=8 && !memcmp(word,"adns_af:",8)) {
+ word += 8;
+ ads->iflags &= ~adns_if_afmask;
+ if (strcmp(word,"any")) for (;;) {
+ i= strcspn(word,",");
+ if (i>=4 && !memcmp(word,"ipv4",4))
+ ads->iflags |= adns_if_permit_ipv4;
+ else if (i>=4 && !memcmp(word,"ipv6",4))
+ ads->iflags |= adns_if_permit_ipv6;
+ else {
+ configparseerr(ads,fn,lno, "option adns_af has bad value `%.*s' "
+ "(must be `any' or list {`ipv4',`ipv6'},...)",
+ i, word);
+ break;
+ }
+ if (!word[i]) break;
+ word= word + i + 1;
+ }
+ continue;
+ }
adns__diag(ads,-1,0,"%s:%d: unknown option `%.*s'", fn,lno, l,word);
}
}
LIST_INIT(ads->tcpw);
LIST_INIT(ads->childw);
LIST_INIT(ads->output);
+ LIST_INIT(ads->intdone);
ads->forallnext= 0;
ads->nextid= 0x311f;
ads->nudp= 0;
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 if (ads->intdone.head) adns__cancel(ads->output.head);
else break;
}
for (i=0; i<ads->nudp; i++) close(ads->udpsocket[i].fd);