summaryrefslogtreecommitdiff
path: root/ares_init.c
diff options
context:
space:
mode:
authorGuenter Knauf <lists@gknw.net>2012-04-19 19:16:27 +0200
committerGuenter Knauf <lists@gknw.net>2012-04-19 19:16:27 +0200
commit2c67ce64596f4ee27bf8f675adec2ca9a5e7b06e (patch)
treea44a40a1e3bede7267a1c8c2f52d64a5cfc2bf88 /ares_init.c
parent80de4a7295c2a77f655d3db10ce4d87ba3b97980 (diff)
downloadc-ares-2c67ce64596f4ee27bf8f675adec2ca9a5e7b06e.tar.gz
c-ares-2c67ce64596f4ee27bf8f675adec2ca9a5e7b06e.tar.bz2
c-ares-2c67ce64596f4ee27bf8f675adec2ca9a5e7b06e.zip
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 <Geert.Uytterhoeven@sonycom.com>
Diffstat (limited to 'ares_init.c')
-rw-r--r--ares_init.c18
1 files 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 <sys/system_properties.h>
+#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;