Movatterモバイル変換
[0]ホーム
getnameinfo
GETNAMEINFO(3) Linux Programmer's ManualGETNAMEINFO(3)NAME getnameinfo - address-to-name translation in protocol-independent man- nerSYNOPSIS #include <sys/socket.h> #include <netdb.h> int getnameinfo(const struct sockaddr *addr, socklen_t addrlen, char *host, socklen_t hostlen, char *serv, socklen_t servlen, int flags); Feature Test Macro Requirements for glibc (seefeature_test_macros(7)): getnameinfo(): Since glibc 2.22: _POSIX_C_SOURCE >= 201112L Glibc 2.21 and earlier: _POSIX_C_SOURCEDESCRIPTION The getnameinfo() function is the inverse ofgetaddrinfo(3): it con- verts a socket address to a corresponding host and service, in a proto- col-independent manner. It combines the functionality of gethost-byaddr(3) andgetservbyport(3), but unlike those functions, getname- info() is reentrant and allows programs to eliminate IPv4-versus-IPv6 dependencies. The addr argument is a pointer to a generic socket address structure (of type sockaddr_in or sockaddr_in6) of size addrlen that holds the input IP address and port number. The arguments host and serv are pointers to caller-allocated buffers (of size hostlen and servlen re- spectively) into which getnameinfo() places null-terminated strings containing the host and service names respectively. The caller can specify that no hostname (or no service name) is re- quired by providing a NULL host (or serv) argument or a zero hostlen (or servlen) argument. However, at least one of hostname or service name must be requested. The flags argument modifies the behavior of getnameinfo() as follows: NI_NAMEREQD If set, then an error is returned if the hostname cannot be de- termined. NI_DGRAM If set, then the service is datagram (UDP) based rather than stream (TCP) based. This is required for the few ports (512-514) that have different services for UDP and TCP. NI_NOFQDN If set, return only the hostname part of the fully qualified do- main name for local hosts. NI_NUMERICHOST If set, then the numeric form of the hostname is returned. (When not set, this will still happen in case the node's name cannot be determined.) NI_NUMERICSERV If set, then the numeric form of the service address is re- turned. (When not set, this will still happen in case the ser- vice's name cannot be determined.) Extensions to getnameinfo() for Internationalized Domain Names Starting with glibc 2.3.4, getnameinfo() has been extended to selec- tively allow hostnames to be transparently converted to and from the Internationalized Domain Name (IDN) format (see RFC 3490, Internation- alizing Domain Names in Applications (IDNA)). Three new flags are de- fined: NI_IDN If this flag is used, then the name found in the lookup process is converted from IDN format to the locale's encoding if neces- sary. ASCII-only names are not affected by the conversion, which makes this flag usable in existing programs and environ- ments. NI_IDN_ALLOW_UNASSIGNED, NI_IDN_USE_STD3_ASCII_RULES Setting these flags will enable the IDNA_ALLOW_UNASSIGNED (allow unassigned Unicode code points) and IDNA_USE_STD3_ASCII_RULES (check output to make sure it is a STD3 conforming hostname) flags respectively to be used in the IDNA handling.RETURN VALUE On success, 0 is returned, and node and service names, if requested, are filled with null-terminated strings, possibly truncated to fit the specified buffer lengths. On error, one of the following nonzero error codes is returned: EAI_AGAIN The name could not be resolved at this time. Try again later. EAI_BADFLAGS The flags argument has an invalid value. EAI_FAIL A nonrecoverable error occurred. EAI_FAMILY The address family was not recognized, or the address length was invalid for the specified family. EAI_MEMORY Out of memory. EAI_NONAME The name does not resolve for the supplied arguments. NI_NAMEREQD is set and the host's name cannot be located, or neither hostname nor service name were requested. EAI_OVERFLOW The buffer pointed to by host or serv was too small. EAI_SYSTEM A system error occurred. The error code can be found in errno. Thegai_strerror(3) function translates these error codes to a human readable string, suitable for error reporting.FILES /etc/hosts /etc/nsswitch.conf /etc/resolv.confVERSIONS getnameinfo() is provided in glibc since version 2.1.ATTRIBUTES For an explanation of the terms used in this section, see at-tributes(7). +--------------+---------------+--------------------+ |Interface | Attribute | Value | +--------------+---------------+--------------------+ |getnameinfo() | Thread safety | MT-Safe env locale | +--------------+---------------+--------------------+CONFORMING TO POSIX.1-2001, POSIX.1-2008, RFC 2553.NOTES In order to assist the programmer in choosing reasonable sizes for the supplied buffers, <netdb.h> defines the constants #define NI_MAXHOST 1025 #define NI_MAXSERV 32 Since glibc 2.8, these definitions are exposed only if suitable feature test macros are defined, namely: _GNU_SOURCE, _DEFAULT_SOURCE (since glibc 2.19), or (in glibc versions up to and including 2.19) _BSD_SOURCE or _SVID_SOURCE. The former is the constant MAXDNAME in recent versions of BIND's <arpa/nameser.h> header file. The latter is a guess based on the ser- vices listed in the current Assigned Numbers RFC. Before glibc version 2.2, the hostlen and servlen arguments were typed as size_t.EXAMPLE The following code tries to get the numeric hostname and service name, for a given socket address. Note that there is no hardcoded reference to a particular address family. 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); The following version checks if the socket address has a reverse ad- dress mapping. 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); An example program using getnameinfo() can be found ingetaddrinfo(3).SEE ALSOaccept(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 and W. Stevens, Basic Socket Inter- face Extensions for IPv6, RFC 2553, March 1999. Tatsuya Jinmei and Atsushi Onoe, An Extension of Format for IPv6 Scoped Addresses, internet draft, work in progress <ftp://ftp.ietf.org /internet-drafts/draft-ietf-ipngwg-scopedaddr-format-02.txt>. Craig Metz, Protocol Independence Using the Sockets API, Proceedings of the freenix track: 2000 USENIX annual technical conference, June 2000 <http://www.usenix.org/publications/library/proceedings/usenix2000 /freenix/metzprotocol.html>.COLOPHON This page is part of release 5.05 of the Linux man-pages project. A description of the project, information about reporting bugs, and the latest version of this page, can be found at https://www.kernel.org/doc/man-pages/.GNU 2019-03-06GETNAMEINFO(3)
Man Pages Copyright Respective Owners. Site Copyright (C) 1994 - 2025Hurricane Electric.All Rights Reserved.
[8]ページ先頭