next up previous contents
Next: Adreßkonvertierung Up: 3.3 Anwendungsentwicklung Previous: Protokollunabhängige Namensauflösung

Protokollunabhängige Adreßauflösung

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]);



Copyright Munich Network Management Team