From: Bert Hubert Date: Sun, 19 Mar 2006 19:19:21 +0000 (+0000) Subject: make asyncresolve accept d_now from caller, and use it to seed DTime, and refill... X-Git-Tag: rec-3-0~155 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5e3da48dd06f72603a7a47a40816b1b752aa3343;p=pdns make asyncresolve accept d_now from caller, and use it to seed DTime, and refill d_now with updated gettimeofday from dtime git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@598 d19b8d6e-7fed-0310-83ef-9ca221ded41b --- diff --git a/pdns/lwres.cc b/pdns/lwres.cc index a8016a8a3..6824040bf 100644 --- a/pdns/lwres.cc +++ b/pdns/lwres.cc @@ -57,7 +57,7 @@ LWRes::~LWRes() //! returns -1 for permanent error, 0 for timeout, 1 for success /** Never throws! */ -int LWRes::asyncresolve(const string &ip, const char *domain, int type, bool doTCP) +int LWRes::asyncresolve(const string &ip, const char *domain, int type, bool doTCP, struct timeval* now) { vector vpacket; DNSPacketWriter pw(vpacket, domain, type); @@ -81,7 +81,7 @@ int LWRes::asyncresolve(const string &ip, const char *domain, int type, bool doT int ret; DTime dt; - dt.set(); + dt.setTimeval(*now); if(!doTCP) { if(asendto((const char*)&*vpacket.begin(), vpacket.size(), 0, (struct sockaddr*)(&toaddr), sizeof(toaddr), pw.getHeader()->id)<0) { @@ -133,7 +133,7 @@ int LWRes::asyncresolve(const string &ip, const char *domain, int type, bool doT ret=1; } d_usec=dt.udiff(); - + *now=dt.getTimeval(); return ret; } diff --git a/pdns/lwres.hh b/pdns/lwres.hh index 1793d7ae5..a0ea4ae20 100644 --- a/pdns/lwres.hh +++ b/pdns/lwres.hh @@ -61,7 +61,7 @@ public: typedef vector res_t; - int asyncresolve(const string &ip, const char *domain, int type, bool doTCP); + int asyncresolve(const string &ip, const char *domain, int type, bool doTCP, struct timeval* now); vector result(); int d_rcode; bool d_aabit, d_tcbit; diff --git a/pdns/syncres.cc b/pdns/syncres.cc index a2dd267b4..9c24aef2b 100644 --- a/pdns/syncres.cc +++ b/pdns/syncres.cc @@ -407,7 +407,7 @@ int SyncRes::doResolveAt(set nameservers, string auth, const string &qna d_tcpoutqueries++; } - int ret=d_lwr.asyncresolve(*remoteIP, qname.c_str(), qtype.getCode(), doTCP); // <- we go out on the wire! + int ret=d_lwr.asyncresolve(*remoteIP, qname.c_str(), qtype.getCode(), doTCP, &d_now); // <- we go out on the wire! if(ret != 1) { if(ret==0) { LOG< nameservers, string auth, const string &qna s_throttle.throttle(d_now.tv_sec, *remoteIP+"|"+qname+"|"+qtype.getName(),20,5); continue; } - gettimeofday(&d_now, 0); + break; // it did work! } }