X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/adns/blobdiff_plain/e8e5aeacbdaf5654974626d548f30a4c86e5ced6..eca4e30a85d4b680d2cfd95bd7eff3719b2fbb46:/src/transmit.c diff --git a/src/transmit.c b/src/transmit.c index e91250a..67a55b4 100644 --- a/src/transmit.c +++ b/src/transmit.c @@ -120,6 +120,7 @@ adns_status adns__mkquery(adns_state ads, vbuf *vb, int *id_r, const char *p, *pe; adns_status st; + if (!((type^adns_r_addr) & adns_rrt_reprmask)) ads->nextid++; st= mkquery_header(ads,vb,id_r,ol+2); if (st) return st; MKQUERY_START(vb); @@ -155,6 +156,7 @@ adns_status adns__mkquery_frdgram(adns_state ads, vbuf *vb, int *id_r, int lablen, labstart; adns_status st; + if (!((type^adns_r_addr) & adns_rrt_reprmask)) ads->nextid++; st= mkquery_header(ads,vb,id_r,qd_dglen); if (st) return st; MKQUERY_START(vb); @@ -241,9 +243,9 @@ static void query_usetcp(adns_query qu, struct timeval now) { } void adns__query_send(adns_query qu, struct timeval now) { - struct sockaddr_in servaddr; int serv, r; adns_state ads; + adns_rr_addr *addr; assert(qu->state == query_tosend); if ((qu->flags & adns_qf_usevc) || (qu->query_dglen > DNS_MAXUDP)) { @@ -256,16 +258,12 @@ void adns__query_send(adns_query qu, struct timeval now) { return; } - serv= qu->udpnextserver; - memset(&servaddr,0,sizeof(servaddr)); - ads= qu->ads; - servaddr.sin_family= AF_INET; - servaddr.sin_addr= ads->servers[serv].addr; - servaddr.sin_port= htons(DNS_PORT); + serv= qu->udpnextserver; + addr= &ads->servers[serv]; r= sendto(ads->udpsocket,qu->query_dgram,qu->query_dglen,0, - (const struct sockaddr*)&servaddr,sizeof(servaddr)); + &addr->addr.sa,addr->len); if (r<0 && errno == EMSGSIZE) { qu->retries= 0; query_usetcp(qu,now);