[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Is glibc getaddrinfo() working on your etch-amd64 system?



In article <[🔎] 1dbf901c831a0$faa40240$6442a8c0@gonzo> (at Wed, 28 Nov 2007 01:28:04 -0800), "Bill Kelly" <billk@cts.com> says:

> I'm in the process of trying to debug why getaddrinfo() is
> failing to perform reverse DNS lookups on my etch-amd64
> system.  (glibc version 2.3.6.ds1-13etch2)

It is nothing to do with amd64, but the usage;
getaddrinfo() is not for reserve DNS lookups.
For that purpose, use getnameinfo() instead.

--yoshfuji

--- getaddrinfo-test.c.orig	2007-11-26 15:51:17.000000000 +0900
+++ getaddrinfo-test.c	2007-11-28 19:49:33.164757204 +0900
@@ -19,7 +19,6 @@
 	const char *host = "208.77.188.166";  // www.example.com
 	const char *port = NULL;
 	int socktype = SOCK_STREAM;
-	int flags = AI_CANONNAME;
 
 	struct addrinfo hints;
 	struct addrinfo* res = NULL;
@@ -28,14 +27,28 @@
 	memset(&hints, 0, sizeof(hints));
 	hints.ai_family = AF_UNSPEC;
 	hints.ai_socktype = socktype;
-	hints.ai_flags = flags;
+	hints.ai_flags = 0;
 
 	error = getaddrinfo(host, port, &hints, &res);
 
-	fprintf(stderr, "sock_addrinfo: error=%d res->ai_canonname='%s'\n", error, (res && res->ai_canonname)? res->ai_canonname : "NULL");
+	if (error) {
+		fprintf(stderr, "sock_addrinfo: error=%d: %s\n",
+			error, gai_strerror(error));
+		return 4;
+	}
+
+	if (res) {
+		char hostbuf[NI_MAXHOST] = "???";
+
+		error = getnameinfo(res->ai_addr, res->ai_addrlen,
+				    hostbuf, sizeof(hostbuf), NULL, 0,
+				    0);
+
+		fprintf(stderr, "sock_nameinfo: error=%d, host=%s\n",
+			error, hostbuf);
 
-	if (res)
 		freeaddrinfo(res);
+	}
 
 	return 0;
 }


--yoshfuji



Reply to: