From 2c67ce64596f4ee27bf8f675adec2ca9a5e7b06e Mon Sep 17 00:00:00 2001 From: Guenter Knauf Date: Thu, 19 Apr 2012 19:16:27 +0200 Subject: [PATCH] Add support for multiple DNS servers on Android. Before, c-ares always used the first DNS server on Android, causing network problems if this DNS server was not available. Signed-off-by: Geert Uytterhoeven --- ares_init.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/ares_init.c b/ares_init.c index a0bfc83..fa9e1d7 100644 --- a/ares_init.c +++ b/ares_init.c @@ -62,6 +62,7 @@ #if defined(ANDROID) || defined(__ANDROID__) #include +#define MAX_DNS_PROPERTIES 8 /* From the Bionic sources */ #endif #include "ares.h" @@ -953,11 +954,22 @@ DhcpNameServer status = ARES_EOF; #elif defined(ANDROID) || defined(__ANDROID__) + unsigned int i; + char name[PROP_NAME_MAX]; char value[PROP_VALUE_MAX]=""; - __system_property_get("net.dns1", value); - status = config_nameserver(&servers, &nservers, value); - if (status == ARES_SUCCESS) + int len; + for (i = 1; i <= MAX_DNS_PROPERTIES; i++) { + snprintf(name, sizeof(name), "net.dns%u", i); + len = __system_property_get(name, value); + if (len < 1) { + status = ARES_EOF; + break; + } + status = config_nameserver(&servers, &nservers, value); + if (status != ARES_SUCCESS) + break; status = ARES_EOF; + } #else { char *p; -- 2.7.4