| 
														
															@@ -2238,6 +2238,21 @@ evdns_resume(void) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	return 0; 
														 | 
														
														 | 
														
															 	return 0; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 } 
														 | 
														
														 | 
														
															 } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+static int 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+sockaddr_is_loopback(const struct sockaddr *addr) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+{ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	static const char LOOPBACK_S6[16] = 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	    "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1"; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	if (addr->sa_family == AF_INET) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		struct sockaddr_in *sin = (struct sockaddr_in *)addr; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		return (ntohl(sin->sin_addr.s_addr) & 0xff000000) == 0x7f000000; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	} else if (addr->sa_family == AF_INET6) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)addr; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		return !memcmp(sin6->sin6_addr.s6_addr, LOOPBACK_S6, 16); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	return 0; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 static int 
														 | 
														
														 | 
														
															 static int 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 _evdns_nameserver_add_impl(const struct sockaddr *address, 
														 | 
														
														 | 
														
															 _evdns_nameserver_add_impl(const struct sockaddr *address, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 						   socklen_t addrlen) { 
														 | 
														
														 | 
														
															 						   socklen_t addrlen) { 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -2279,7 +2294,8 @@ _evdns_nameserver_add_impl(const struct sockaddr *address, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	fcntl(ns->socket, F_SETFL, O_NONBLOCK); 
														 | 
														
														 | 
														
															 	fcntl(ns->socket, F_SETFL, O_NONBLOCK); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 #endif 
														 | 
														
														 | 
														
															 #endif 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	if (global_bind_addr_is_set) { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	if (global_bind_addr_is_set && 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	    !sockaddr_is_loopback((struct sockaddr*)&global_bind_address)) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		if (bind(ns->socket, (struct sockaddr *)&global_bind_address, 
														 | 
														
														 | 
														
															 		if (bind(ns->socket, (struct sockaddr *)&global_bind_address, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 				 global_bind_addrlen) < 0) { 
														 | 
														
														 | 
														
															 				 global_bind_addrlen) < 0) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			log(EVDNS_LOG_DEBUG, "Couldn't bind to outgoing address."); 
														 | 
														
														 | 
														
															 			log(EVDNS_LOG_DEBUG, "Couldn't bind to outgoing address."); 
														 |