|  | @@ -1425,14 +1425,31 @@ configure_nameservers(int force)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #define SET(k,v)  evdns_base_set_option(the_evdns_base, (k), (v))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  // If we only have one nameserver, it does not make sense to back off
 | 
	
		
			
				|  |  | +  // from it for a timeout. Unfortunately, the value for max-timeouts is
 | 
	
		
			
				|  |  | +  // currently clamped by libevent to 255, but it does not hurt to set
 | 
	
		
			
				|  |  | +  // it higher in case libevent gets a patch for this.
 | 
	
		
			
				|  |  | +  // Reducing attempts in the case of just one name server too, because
 | 
	
		
			
				|  |  | +  // it is very likely to be a local one where a network connectivity
 | 
	
		
			
				|  |  | +  // issue should not cause an attempt to fail.
 | 
	
		
			
				|  |  |    if (evdns_base_count_nameservers(the_evdns_base) == 1) {
 | 
	
		
			
				|  |  | -    SET("max-timeouts:", "16");
 | 
	
		
			
				|  |  | -    SET("timeout:", "10");
 | 
	
		
			
				|  |  | +    SET("max-timeouts:", "1000000");
 | 
	
		
			
				|  |  | +    SET("attempts:", "1");
 | 
	
		
			
				|  |  |    } else {
 | 
	
		
			
				|  |  |      SET("max-timeouts:", "3");
 | 
	
		
			
				|  |  | -    SET("timeout:", "5");
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  // Elongate the queue of maximum inflight dns requests, so if a bunch
 | 
	
		
			
				|  |  | +  // time out at the resolver (happens commonly with unbound) we won't
 | 
	
		
			
				|  |  | +  // stall every other DNS request. This potentially means some wasted
 | 
	
		
			
				|  |  | +  // CPU as there's a walk over a linear queue involved, but this is a
 | 
	
		
			
				|  |  | +  // much better tradeoff compared to just failing DNS requests because
 | 
	
		
			
				|  |  | +  // of a full queue.
 | 
	
		
			
				|  |  | +  SET("max-inflight:", "8192");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // Time out after 5 seconds if no reply.
 | 
	
		
			
				|  |  | +  SET("timeout:", "5");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    if (options->ServerDNSRandomizeCase)
 | 
	
		
			
				|  |  |      SET("randomize-case:", "1");
 | 
	
		
			
				|  |  |    else
 |