61b073a
--- dighost.c.orig	2011-03-11 07:46:58.000000000 +0100
61b073a
+++ dighost.c	2011-10-28 14:31:29.806591603 +0200
61b073a
@@ -2619,8 +2619,13 @@ connect_timeout(isc_task_t *task, isc_ev
61b073a
 		}
61b073a
 	} else {
61b073a
 		fputs(l->cmdline, stdout);
61b073a
-		printf(";; connection timed out; no servers could be "
61b073a
-		       "reached\n");
2cc782f
+		if (!next_origin(ISC_LIST_HEAD(l->q))) {
61b073a
+			printf(";; connection timed out; no servers could be "
61b073a
+			       "reached\n");
61b073a
+		} else {
61b073a
+			printf(";; connection timed out; trying next "
61b073a
+			       "origin\n");
61b073a
+		}
61b073a
 		cancel_lookup(l);
61b073a
 		check_next_lookup(l);
61b073a
 		if (exitcode < 9)
61b073a
@@ -3270,7 +3275,8 @@ recv_done(isc_task_t *task, isc_event_t 
61b073a
 		return;
61b073a
 	}
61b073a
 	if ((msg->rcode == dns_rcode_servfail && !l->servfail_stops) ||
61b073a
-	    (check_ra && (msg->flags & DNS_MESSAGEFLAG_RA) == 0 && l->recurse))
61b073a
+	    (check_ra && (msg->flags & DNS_MESSAGEFLAG_RA) == 0 &&
61b073a
+	     msg->rcode != dns_rcode_noerror && l->recurse))
61b073a
 	{
61b073a
 		dig_query_t *next = ISC_LIST_NEXT(query, link);
61b073a
 		if (l->current_query == query)