From: Pieter Lexis Date: Wed, 14 Feb 2018 12:58:15 +0000 (+0100) Subject: resolver.{cc,hh}: Allow setting the inbound AXFR timeout X-Git-Tag: rec-4.1.2~6^2~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a82e3b0d5acab39b049dc52ac00bea89c6ae4185;p=thirdparty%2Fpdns.git resolver.{cc,hh}: Allow setting the inbound AXFR timeout (cherry picked from commit 99bea744a47e6de2ec399e78c0e43cd1b54537b3) --- diff --git a/pdns/resolver.cc b/pdns/resolver.cc index 51d81160c4..b40d5b7da0 100644 --- a/pdns/resolver.cc +++ b/pdns/resolver.cc @@ -446,7 +446,7 @@ AXFRRetriever::~AXFRRetriever() -int AXFRRetriever::getChunk(Resolver::res_t &res, vector* records) // Implementation is making sure RFC2845 4.4 is followed. +int AXFRRetriever::getChunk(Resolver::res_t &res, vector* records, uint16_t timeout) // Implementation is making sure RFC2845 4.4 is followed. { if(d_soacount > 1) return false; @@ -459,7 +459,7 @@ int AXFRRetriever::getChunk(Resolver::res_t &res, vector* records) // if (d_maxReceivedBytes > 0 && (d_maxReceivedBytes - d_receivedBytes) < (size_t) len) throw ResolverException("Reached the maximum number of received bytes during AXFR"); - timeoutReadn(len); + timeoutReadn(len, timeout); d_receivedBytes += (uint16_t) len; @@ -492,13 +492,13 @@ int AXFRRetriever::getChunk(Resolver::res_t &res, vector* records) // return true; } -void AXFRRetriever::timeoutReadn(uint16_t bytes) +void AXFRRetriever::timeoutReadn(uint16_t bytes, uint16_t timeoutsec) { - time_t start=time(0); + time_t start=time(nullptr); int n=0; int numread; while(n* records=0); + int getChunk(Resolver::res_t &res, vector* records=0, uint16_t timeout=10); private: void connect(); int getLength(); - void timeoutReadn(uint16_t bytes); + void timeoutReadn(uint16_t bytes, uint16_t timeoutsec=10); shared_array d_buf; string d_domain;