]> granicus.if.org Git - pdns/commitdiff
make asyncresolve accept d_now from caller, and use it to seed DTime, and refill...
authorBert Hubert <bert.hubert@netherlabs.nl>
Sun, 19 Mar 2006 19:19:21 +0000 (19:19 +0000)
committerBert Hubert <bert.hubert@netherlabs.nl>
Sun, 19 Mar 2006 19:19:21 +0000 (19:19 +0000)
git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@598 d19b8d6e-7fed-0310-83ef-9ca221ded41b

pdns/lwres.cc
pdns/lwres.hh
pdns/syncres.cc

index a8016a8a3cb54d7c1e7f14fd801450c4c5316767..6824040bf5db10efb6dfe9c077df45bd28a06e36 100644 (file)
@@ -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<uint8_t> 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;
 }
 
index 1793d7ae5cfbcee2b22a38847d28d51f6010be4a..a0ea4ae20e00230762d8631143020c9a1ac4a1b8 100644 (file)
@@ -61,7 +61,7 @@ public:
 
   typedef vector<DNSResourceRecord> 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<DNSResourceRecord> result();
   int d_rcode;
   bool d_aabit, d_tcbit;
index a2dd267b429c72de4b2de48c4fee8fea36b1dc1e..9c24aef2bf8a7470b3f4f5dd2ad1fe0b08ac64e3 100644 (file)
@@ -407,7 +407,7 @@ int SyncRes::doResolveAt(set<string> 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<<prefix<<qname<<": timeout resolving"<<endl;
@@ -422,7 +422,7 @@ int SyncRes::doResolveAt(set<string> 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!
        }
       }