* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: resolver.c,v 1.417 2010/02/25 05:08:01 tbox Exp $ */
+/* $Id: resolver.c,v 1.418 2010/03/04 06:43:21 marka Exp $ */
/*! \file */
unsigned int findoptions;
isc_result_t broken_server;
badnstype_t broken_type = badns_response;
+ isc_boolean_t no_response;
REQUIRE(VALID_QUERY(query));
fctx = query->fctx;
resend = ISC_FALSE;
truncated = ISC_FALSE;
finish = NULL;
+ no_response = ISC_FALSE;
if (fctx->res->exiting) {
result = ISC_R_SHUTTINGDOWN;
/*
* If this is a network error on an exclusive query
* socket, mark the server as bad so that we won't try
- * it for this fetch again.
+ * it for this fetch again. Also adjust finish and
+ * no_response so that we penalize this address in SRTT
+ * adjustment later.
*/
if (query->exclusivesocket &&
(devent->result == ISC_R_HOSTUNREACH ||
devent->result == ISC_R_CANCELED)) {
broken_server = devent->result;
broken_type = badns_unreachable;
+ finish = NULL;
+ no_response = ISC_TRUE;
}
}
goto done;
*
* XXXRTH Don't cancel the query if waiting for validation?
*/
- fctx_cancelquery(&query, &devent, finish, ISC_FALSE);
+ fctx_cancelquery(&query, &devent, finish, no_response);
if (keep_trying) {
if (result == DNS_R_FORMERR)