getnameinfo(3) Library Functions Manual getnameinfo(3) NOM getnameinfo - Traduction d'adresse en nom de facon independante du protocole BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include #include int getnameinfo(const struct sockaddr *restrict addr, socklen_t addrlen, char host[_Nullable restrict .hostlen], socklen_t hostlen, char serv[_Nullable restrict .servlen], socklen_t servlen, int flags); Exigences de macros de test de fonctionnalites pour la glibc (consulter feature_test_macros(7)) : getnameinfo() : Depuis la glibc 2.22 : _POSIX_C_SOURCE >= 200112L glibc 2.21 et anterieures : _POSIX_C_SOURCE DESCRIPTION La fonction getnameinfo() est la reciproque de getaddrinfo(3) : elle convertit une adresse de socket en un hote et un service correspondants, de facon independante du protocole. Elle combine les fonctionnalites de gethostbyaddr(3) et getservbyport(3) mais contrairement a ces fonctions, getnameinfo() est reentrante et permet aux programmes de supprimer les dependances IPv4/IPv6. Le parametre addr est un pointeur vers une structure d'adresse de socket generique (de type sockaddr_in ou sockaddr_in6) de taille addrlen qui contient l'adresse IP d'entree et le numero de port. Les parametres host et serv sont des pointeurs vers des tampons alloues par l'appelant (de tailles respectives hostlen et servlen) dans lesquels getnameinfo() place des chaines de caracteres, terminees par un octet NULL, contenant respectivement les noms d'hote et de service. L'appelant peut preciser qu'aucun nom d'hote (ou qu'aucun nom de service) n'est necessaire en fournissant NULL comme parametre host (ou serv) ou bien en passant un parametre hostlen (ou servlen) valant zero. Quoi qu'il en soit, au moins un nom d'hote ou un nom de service doit etre demande. Le parametre flags modifie le comportement de getnameinfo() comme indique ci-dessous : NI_NAMEREQD S'il est defini, une erreur se produira si le nom de l'hote n'a pas pu etre determine. NI_DGRAM S'il est positionne, indique que le service est plutot base sur des datagrammes (UDP) que sur un flux connecte (TCP). Ce drapeau est necessaire pour les quelques ports (512-514) qui ont des services differents selon le protocole utilise : UDP ou TCP. NI_NOFQDN S'il est positionne, renvoie seulement la partie nom de l'hote du FQDN (Fully-Qualified Domain Name) pour les hotes locaux. NI_NUMERICHOST S'il est positionne, la forme numerique du nom de l'hote est renvoyee. (Meme si ce drapeau n'est pas leve, cela arrivera egalement lorsque le nom du noeud ne pourra pas etre determine.) NI_NUMERICSERV S'il est positionne, la forme numerique du service est renvoyee. (S'il n'est pas defini, cela arrivera egalement si le nom du service n'a pas pu etre determine.) Extensions de getnameinfo() pour les noms de domaines internationalises Depuis la glibc 2.3.4, getnameinfo() a ete modifie pour selectivement permettre que les noms de domaines soient convertis vers ou depuis le format des noms de domaines internationalises (IDN). Consultez la RFC 3490, Internationalizing Domain Names in Applications (IDNA). Trois nouveaux attributs ont ete ajoutes : NI_IDN Si cet attribut est utilise, alors le nom trouve lors de la resolution des noms est converti depuis le format IDN vers la locale du systeme si necessaire. Les noms au format ASCII ne sont pas affectes par cette conversion, ce qui permet d'utiliser cet attribut dans des programmes et des environnements existants. NI_IDN_ALLOW_UNASSIGNED NI_IDN_USE_STD3_ASCII_RULES Utiliser ces attributs permet d'activer respectivement les attributs << IDNA_ALLOW_UNASSIGNED >> (permettre des caracteres Unicode non assignes) et << IDNA_USE_STD3_ASCII_RULES >> (verifier la sortie pour etre sur que le nom d'hote est conforme a STD3) utilises dans la gestion de l'IDNA. VALEUR RENVOYEE En cas de succes, 0 est renvoye et les noms du noeud et du service, s'ils sont demandes, sont renseignes sous forme de chaines terminees par un octet NULL, eventuellement tronquees afin de s'adapter aux tailles des tampons indiques. En cas d'erreur, un des codes d'erreur non nul suivants est renvoye : EAI_AGAIN Le nom ne peut pas etre resolu a cet instant. Reessayer plus tard. EAI_BADFLAGS Le parametre flags n'est pas valable. EAI_FAIL Une erreur irrecuperable est survenue. EAI_FAMILY La famille d'adresse n'a pas ete reconnue, ou bien la taille de l'adresse etait incorrecte pour la famille indiquee. EAI_MEMORY Plus assez de memoire. EAI_NONAME Le nom ne peut etre resolu avec les parametres fournis. NI_NAMEREQD est indique et le nom de l'hote ne peut etre localise, ou ni un nom d'hote ni un nom de service n'a ete demande. EAI_OVERFLOW Le tampon pointe par host ou serv est trop petit. EAI_SYSTEM Une erreur systeme a eu lieu. Le code d'erreur peut etre lu dans errno. La fonction gai_strerror(3) traduit ces codes d'erreur en une chaine de caracteres comprehensible, utilisable pour rendre compte du probleme. FICHIERS /etc/hosts /etc/nsswitch.conf /etc/resolv.conf ATTRIBUTS Pour une explication des termes utilises dans cette section, consulter attributes(7). +----------------------+--------------------------+--------------------+ |Interface | Attribut | Valeur | +----------------------+--------------------------+--------------------+ |getnameinfo() | Securite des threads | MT-Safe env locale | +----------------------+--------------------------+--------------------+ STANDARDS POSIX.1-2008. RFC 2553. HISTORIQUE glibc 2.1. POSIX.1-2001. Avant la version 2.2 de la glibc, les parametres hostlen et servlen etaient de type size_t. NOTES Afin d'aider les programmeurs a choisir des tailles raisonnables pour les tampons fournis, definit les constantes #define NI_MAXHOST 1025 #define NI_MAXSERV 32 Depuis la glibc 2.8, ces definitions sont exposees seulement si des macros de test de fonctionnalites sont definies, a savoir _GNU_SOURCE, _DEFAULT_SOURCE (depuis la glibc 2.19) ou (dans les versions superieures ou egales a la 2.19 de la glibc) _BSD_SOURCE ou _SVID_SOURCE. La premiere est la constante MAXDNAME presente dans les versions recentes du fichier d'en-tetes de BIND. La deuxieme est determinee en se basant sur les services repertories dans la RFC << Assigned numbers >>. EXEMPLES Le code suivant essaie d'obtenir le nom de l'hote ainsi que le nom du service sous forme numerique, et ce, pour une adresse de socket donnee. Remarquez qu'il n'y a aucune reference codee en dur a une quelconque famille d'adresse . struct sockaddr *addr; /* input */ socklen_t addrlen; /* input */ char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV]; if (getnameinfo(addr, addrlen, hbuf, sizeof(hbuf), sbuf, sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV) == 0) printf("host=%s, serv=%s\n", hbuf, sbuf); La version suivante verifie si l'adresse du socket peut se voir associer un nom. struct sockaddr *addr; /* input */ socklen_t addrlen; /* input */ char hbuf[NI_MAXHOST]; if (getnameinfo(addr, addrlen, hbuf, sizeof(hbuf), NULL, 0, NI_NAMEREQD)) printf("could not resolve hostname"); else printf("host=%s\n", hbuf); Un programme d'exemple utilisant getnameinfo() peut etre trouve dans getaddrinfo(3). VOIR AUSSI accept(2), getpeername(2), getsockname(2), recvfrom(2), socket(2), getaddrinfo(3), gethostbyaddr(3), getservbyname(3), getservbyport(3), inet_ntop(3), hosts(5), services(5), hostname(7), named(8) R. Gilligan, S. Thomson, J. Bound et W. Stevens, Basic Socket Interface Extensions for IPv6, RFC 2553, mars 1999. Tatsuya Jinmei et Atsushi Onoe, An Extension of Format for IPv6 Scoped Addresses, internet draft, travail en cours . Craig Metz, Protocol Independence Using the Sockets API, compte rendu du sujet freenix : conference technique annuelle USENIX 2000, juin 2000 . TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Jean-Philippe MENGUAL Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.9.1 15 juin 2024 getnameinfo(3)