Man page - getnameinfo(3)

Packages contains this manual

Available languages:

en fr pl ja ru

Manual

getnameinfo

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
Extensions de getnameinfo() pour les noms de domaines internationalisés
VALEUR RENVOYÉE
FICHIERS
ATTRIBUTS
STANDARDS
HISTORIQUE
NOTES
EXEMPLES
VOIR AUSSI
TRADUCTION

NOM

getnameinfo – Traduction d’adresse en nom de façon indĂ©pendante du protocole

BIBLIOTHÈQUE

BibliothĂšque C standard ( libc , -lc )

SYNOPSIS

#include <sys/socket.h>
#include <netdb.h>

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 fonctionnalités pour la glibc (consulter feature_test_macros (7)) :

getnameinfo () :
Depuis la glibc 2.22 :
_POSIX_C_SOURCE >= 200112L
glibc 2.21 et antérieures :
_POSIX_C_SOURCE

DESCRIPTION

La fonction getnameinfo () est la réciproque de getaddrinfo (3) : elle convertit une adresse de socket en un hÎte et un service correspondants, de façon indépendante du protocole. Elle combine les fonctionnalités de gethostbyaddr (3) et getservbyport (3) mais contrairement à ces fonctions, getnameinfo () est réentrante et permet aux programmes de supprimer les dépendances IPv4/IPv6.

Le paramĂštre addr est un pointeur vers une structure d’adresse de socket gĂ©nĂ©rique (de type sockaddr_in ou sockaddr_in6 ) de taille addrlen qui contient l’adresse IP d’entrĂ©e et le numĂ©ro de port. Les paramĂštres host et serv sont des pointeurs vers des tampons allouĂ©s par l’appelant (de tailles respectives hostlen et servlen ) dans lesquels getnameinfo () place des chaĂźnes de caractĂšres, terminĂ©es par un octet NULL, contenant respectivement les noms d’hĂŽte et de service.

L’appelant peut prĂ©ciser qu’aucun nom d’hĂŽte (ou qu’aucun nom de service) n’est nĂ©cessaire en fournissant NULL comme paramĂštre host (ou serv ) ou bien en passant un paramĂštre hostlen (ou servlen ) valant zĂ©ro. Quoi qu’il en soit, au moins un nom d’hĂŽte ou un nom de service doit ĂȘtre demandĂ©.

Le paramÚtre flags modifie le comportement de getnameinfo () comme indiqué ci-dessous :
NI_NAMEREQD

S’il est dĂ©fini, une erreur se produira si le nom de l’hĂŽte n’a pas pu ĂȘtre dĂ©terminĂ©.

NI_DGRAM

S’il est positionnĂ©, indique que le service est plutĂŽt basĂ© sur des datagrammes (UDP) que sur un flux connectĂ© (TCP). Ce drapeau est nĂ©cessaire pour les quelques ports (512-514) qui ont des services diffĂ©rents selon le protocole utilisé : UDP ou TCP.

NI_NOFQDN

S’il est positionnĂ©, renvoie seulement la partie nom de l’hĂŽte du FQDN (Fully-Qualified Domain Name) pour les hĂŽtes locaux.

NI_NUMERICHOST

S’il est positionnĂ©, la forme numĂ©rique du nom de l’hĂŽte est renvoyĂ©e. (MĂȘme si ce drapeau n’est pas levĂ©, cela arrivera Ă©galement lorsque le nom du nƓud ne pourra pas ĂȘtre dĂ©terminĂ©.)

NI_NUMERICSERV

S’il est positionnĂ©, la forme numĂ©rique du service est renvoyĂ©e. (S’il n’est pas dĂ©fini, cela arrivera Ă©galement si le nom du service n’a pas pu ĂȘtre dĂ©terminĂ©.)

Extensions de getnameinfo() pour les noms de domaines internationalisés

Depuis la glibc 2.3.4, getnameinfo () a été modifié pour sélectivement permettre que les noms de domaines soient convertis vers ou depuis le format des noms de domaines internationalisés (IDN). Consultez la RFC 3490, Internationalizing Domain Names in Applications (IDNA) . Trois nouveaux attributs ont été ajoutés :

NI_IDN

Si cet attribut est utilisĂ©, alors le nom trouvĂ© lors de la rĂ©solution des noms est converti depuis le format IDN vers la locale du systĂšme si nĂ©cessaire. Les noms au format ASCII ne sont pas affectĂ©s 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 caractĂšres Unicode non assignĂ©s) et « IDNA_USE_STD3_ASCII_RULES » (vĂ©rifier la sortie pour ĂȘtre sĂ»r que le nom d’hĂŽte est conforme Ă  STD3) utilisĂ©s dans la gestion de l’IDNA.

VALEUR RENVOYÉE

En cas de succĂšs, 0 est renvoyĂ© et les noms du nƓud et du service, s’ils sont demandĂ©s, sont renseignĂ©s sous forme de chaĂźnes terminĂ©es par un octet NULL, Ă©ventuellement tronquĂ©es afin de s’adapter aux tailles des tampons indiquĂ©s. En cas d’erreur, un des codes d’erreur non nul suivants est renvoyé :
EAI_AGAIN

Le nom ne peut pas ĂȘtre rĂ©solu Ă  cet instant. RĂ©essayer plus tard.

EAI_BADFLAGS

Le paramùtre flags n’est pas valable.

EAI_FAIL

Une erreur irrécupérable est survenue.

EAI_FAMILY

La famille d’adresse n’a pas Ă©tĂ© reconnue, ou bien la taille de l’adresse Ă©tait incorrecte pour la famille indiquĂ©e.

EAI_MEMORY

Plus assez de mémoire.

EAI_NONAME

Le nom ne peut ĂȘtre rĂ©solu avec les paramĂštres fournis. NI_NAMEREQD est indiquĂ© et le nom de l’hĂŽte ne peut ĂȘtre localisĂ©, ou ni un nom d’hĂŽte ni un nom de service n’a Ă©tĂ© demandĂ©.

EAI_OVERFLOW

Le tampon pointé par host ou serv est trop petit.

EAI_SYSTEM

Une erreur systĂšme a eu lieu. Le code d’erreur peut ĂȘtre lu dans errno .

La fonction gai_strerror (3) traduit ces codes d’erreur en une chaĂźne de caractĂšres comprĂ©hensible, utilisable pour rendre compte du problĂšme.

FICHIERS

/etc/hosts
/etc/nsswitch.conf
/etc/resolv.conf

ATTRIBUTS

Pour une explication des termes utilisés dans cette section, consulter attributes (7).

Image grohtml-3875140-1.png

STANDARDS

POSIX.1-2008. RFC 2553.

HISTORIQUE

glibc 2.1. POSIX.1-2001.

Avant la version 2.2 de la glibc, les paramÚtres hostlen et servlen étaient de type size_t .

NOTES

Afin d’aider les programmeurs Ă  choisir des tailles raisonnables pour les tampons fournis, <netdb.h> dĂ©finit les constantes

#define NI_MAXHOST 1025
#define NI_MAXSERV 32

Depuis la glibc 2.8, ces définitions sont exposées seulement si des macros de test de fonctionnalités sont définies, à savoir _GNU_SOURCE , _DEFAULT_SOURCE (depuis la glibc 2.19) ou (dans les versions supérieures ou égales à la 2.19 de la glibc) _BSD_SOURCE ou _SVID_SOURCE .

La premiĂšre est la constante MAXDNAME prĂ©sente dans les versions rĂ©centes du fichier d’en-tĂȘtes <arpa/nameser.h> de BIND. La deuxiĂšme est dĂ©terminĂ©e en se basant sur les services rĂ©pertoriĂ©s dans la RFC « Assigned numbers ».

EXEMPLES

Le code suivant essaie d’obtenir le nom de l’hĂŽte ainsi que le nom du service sous forme numĂ©rique, et ce, pour une adresse de socket donnĂ©e. Remarquez qu’il n’y a aucune rĂ©fĂ©rence codĂ©e en dur Ă  une quelconque famille d’adresse .

struct sockaddr *addr; /* entrée */
socklen_t addrlen; /* entrée */
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 vĂ©rifie si l’adresse du socket peut se voir associer un nom.

struct sockaddr *addr; /* entrée */
socklen_t addrlen; /* entrée */
char hbuf[NI_MAXHOST];
if (getnameinfo(addr, addrlen, hbuf, sizeof(hbuf),
NULL, 0, NI_NAMEREQD))
printf("Incapable de rĂ©soudre le nom d’hĂŽte");
else
printf("host=%s\n", hbuf);

Un programme d’exemple utilisant getnameinfo () peut ĂȘtre trouvĂ© 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 ftp://ftp.ietf.org/internet-drafts/draft-ietf-ipngwg-scopedaddr-format-02.txt .

Craig Metz, Protocol Independence Using the Sockets API , compte rendu du sujet freenix : conférence technique annuelle USENIX 2000, juin 2000 http://www.usenix.org/publications/library/proceedings/usenix2000/freenix/metzprotocol.html .

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Jean-Philippe MENGUAL <jpmengual@debian.org>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n’y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .