]> granicus.if.org Git - pdns/commitdiff
ixfrdist: Also respect the AXFR timeout for the chunk's length
authorRemi Gacogne <remi.gacogne@powerdns.com>
Sun, 25 Feb 2018 15:41:36 +0000 (16:41 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Sun, 25 Feb 2018 15:41:36 +0000 (16:41 +0100)
We used to apply the default timeout of 10s to retrieve the chunk's
length even if we were passed a different one.

pdns/resolver.cc
pdns/resolver.hh

index bdc3ebf680334ed7651e2b95a6020f76a39eb416..b839f1fd99bdd686e30c8a2bbadae2e1ee3d3e26 100644 (file)
@@ -442,7 +442,7 @@ int AXFRRetriever::getChunk(Resolver::res_t &res, vector<DNSRecord>* records, ui
     return false;
 
   // d_sock is connected and is about to spit out a packet
-  int len=getLength();
+  int len=getLength(timeout);
   if(len<0)
     throw ResolverException("EOF trying to read axfr chunk from remote TCP client");
 
@@ -557,9 +557,9 @@ void AXFRRetriever::connect()
   // d_sock now connected
 }
 
-int AXFRRetriever::getLength()
+int AXFRRetriever::getLength(uint16_t timeout)
 {
-  timeoutReadn(2);
+  timeoutReadn(2, timeout);
   return (unsigned char)d_buf[0]*256+(unsigned char)d_buf[1];
 }
 
index 9246994cb68b779f8f189e7b799039f3b3e404ff..419aa032eaf3fb94d724a457be4bf4e12af5b808 100644 (file)
@@ -91,7 +91,7 @@ class AXFRRetriever : public boost::noncopyable
   
   private:
     void connect();
-    int getLength();
+    int getLength(uint16_t timeout);
     void timeoutReadn(uint16_t bytes, uint16_t timeoutsec=10);
 
     shared_array<char> d_buf;