caused the fetch to fail with a SERVFAIL result.
[RT #588, #597, #605, #607]
+ 647. [bug] Resolver queries sent after following multiple
+ referrals had excessively long retransmission
+ timeouts due to incorrectly counting the referrals
+ as "restarts".
+
646. [bug] The UnixWare ISC_PLATFORM_FIXIN6INADDR fix in isc/net.h
didn't _cleanly_ fix the problem it was trying to fix.
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: resolver.c,v 1.187.2.1 2001/01/05 22:06:19 gson Exp $ */
+/* $Id: resolver.c,v 1.187.2.2 2001/01/05 22:18:28 bwelling Exp $ */
#include <config.h>
dns_fwdpolicy_t fwdpolicy;
isc_sockaddrlist_t bad;
ISC_LIST(dns_validator_t) validators;
+
/*
- * # of events we're waiting for.
+ * The number of events we're waiting for.
*/
unsigned int pending;
+
/*
- * # of times we have started from the beginning
- * of the name server set.
+ * The number of times we've "restarted" the current
+ * nameserver set. This acts as a failsafe to prevent
+ * us from pounding constantly on a particular set of
+ * servers that, for whatever reason, are not giving
+ * us useful responses, but are responding in such a
+ * way that they are not marked "bad".
*/
unsigned int restarts;
+
/*
- * # of timeouts that have occurred since we last
- * successfully received a response packet. This
- * is used for EDNS0 black hole detectino.
+ * The number of timeouts that have occurred since we
+ * last successfully received a response packet. This
+ * is used for EDNS0 black hole detection.
*/
unsigned int timeouts;
};
*/
get_nameservers = ISC_TRUE;
keep_trying = ISC_TRUE;
+ /*
+ * We have a new set of name servers, and it
+ * has not experienced any restarts yet.
+ */
+ fctx->restarts = 0;
result = ISC_R_SUCCESS;
} else if (result != ISC_R_SUCCESS) {
/*