aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Stapelberg2011-01-03 15:00:42 +0100
committerMichael Stapelberg2011-01-03 15:00:42 +0100
commit39feebea4d3a4cd05ea264202f8523202190f43f (patch)
treed8cc8bb6495f0aabd54cbe0e4b292794e9639b8e /src
parentUse kill(pid, 0) to check if the process is alive (diff)
Cache the result of the DNS query also if there is no IPv6 connectivity (Thanks dothebart)
Diffstat (limited to 'src')
-rw-r--r--src/print_ipv6_addr.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/print_ipv6_addr.c b/src/print_ipv6_addr.c
index b370011..e96c0d3 100644
--- a/src/print_ipv6_addr.c
+++ b/src/print_ipv6_addr.c
@@ -70,6 +70,7 @@ static char *get_ipv6_addr() {
memset(&hints, 0, sizeof(struct addrinfo));
hints.ai_family = AF_INET6;
+ hints.ai_socktype = SOCK_DGRAM;
/* We resolve the K root server to get a public IPv6 address. You can
* replace this with any other host which has an AAAA record, but the
@@ -83,7 +84,11 @@ static char *get_ipv6_addr() {
for (resp = result; resp != NULL; resp = resp->ai_next) {
char *addr_string = get_sockname(resp);
- if (!addr_string)
+ /* If we could not get our own address and there is more than
+ * one result for resolving k.root-servers.net, we cannot
+ * cache. Otherwise, no matter if we got IPv6 connectivity or
+ * not, we will cache the (single) result and are done. */
+ if (!addr_string && result->ai_next != NULL)
continue;
if ((cached = malloc(sizeof(struct addrinfo))) == NULL)