aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Stapelberg2011-01-03 15:00:42 +0100
committerMichael Stapelberg2011-01-03 15:00:42 +0100
commit39feebea4d3a4cd05ea264202f8523202190f43f (patch)
treed8cc8bb6495f0aabd54cbe0e4b292794e9639b8e
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)
-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)