Der POSIX 1003.1g-Entwurf enthält keine zu getaddrinfo() inverse Funktion zur Ermittlung von Host- und Portnamen für gegebene binäre Adressen und Ports. [Gilligan 97] definiert dazu die Funktion getnameinfo():
int getnameinfo(const struct sockaddr *sa , size_t salen , char *host , size_t hostlen , char *serv , size_t servlen , int flags );
In sa wird eine sockaddr-Struktur übergeben, die die binären Host- und Portangaben enthält. In host bzw. serv wird der ermittelte Host- bzw. Portname zurückgeliefert, abhängig von in flags gesetzten Optionen. Im Beispiel wird die Funktion zweimal aufgerufen, um sowohl Namen als auch Nummern zu erhalten:
if (result = getnameinfo(ai->ai_addr, ai->ai_addrlen,
hbuf[0], sizeof(hbuf[0]),
sbuf[0], sizeof(sbuf[0]), 0)) {
fprintf(stderr, "getnameinfo: %s\n", gai_strerror(result));
continue;
};
if (result = getnameinfo(ai->ai_addr, ai->ai_addrlen,
hbuf[1], sizeof(hbuf[1]),
sbuf[1], sizeof(sbuf[1]),
NI_NUMERICHOST | NI_NUMERICSERV)) {
fprintf(stderr, "getnameinfo: %s\n", gai_strerror(result));
continue;
};
printf("ai_addr: %s.%s(%s.%s)\n\n",
hbuf[0], sbuf[0], hbuf[1], sbuf[1]);