From a82e3b0d5acab39b049dc52ac00bea89c6ae4185 Mon Sep 17 00:00:00 2001 From: Pieter Lexis Date: Wed, 14 Feb 2018 13:58:15 +0100 Subject: [PATCH] resolver.{cc,hh}: Allow setting the inbound AXFR timeout (cherry picked from commit 99bea744a47e6de2ec399e78c0e43cd1b54537b3) --- pdns/resolver.cc | 10 +++++----- pdns/resolver.hh | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pdns/resolver.cc b/pdns/resolver.cc index 51d81160c..b40d5b7da 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; -- 2.49.0