getnameinfo

TriggerTek Logo
abcdefghijklmnopqrstuvwxyz_
getnameinfo(3)		   UNIX Programmer’s Manual	       getnameinfo(3)



NAME
       getnameinfo - address-to-name translation in protocol-independent man-
       ner

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

       int getnameinfo(const struct sockaddr *sa, socklen_t salen,
		       char *host, size_t hostlen,
		       char *serv, size_t servlen, int flags);

DESCRIPTION
       The  getnameinfo(3)  function  is  defined  for	 protocol-independent
       address-to-nodename  translation.   It  combines	 the functionality of
       gethostbyaddr(3) and getservbyport(3) and is  the  inverse  of  getad-
       drinfo(3).   The	 sa argument is a pointer to a generic socket address
       structure (of type sockaddr_in or sockaddr_in6)	of  size  salen	 that
       holds  the  input  IP address and port number.  The arguments host and
       serv are pointers to buffers (of	 size  hostlen	and  servlen  respec-
       tively) to hold the return values.

       The  caller  can	 specify  that	no  hostname  (or no service name) is
       required by providing a NULL host (or serv) argument or a zero hostlen
       (or  servlen)  parameter. However, at least one of hostname or service
       name must be requested.

       The flags argument modifies the behaviour of  getnameinfo(3)  as	 fol-
       lows:

       NI_NOFQDN
	      If  set,	return	only  the hostname part of the FQDN 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 looked up.)

       NI_NAMEREQD
	      If set, then a error is returned	if  the	 hostname  cannot  be
	      looked up.

       NI_NUMERICSERV
	      If  set,	then the service address is returned in numeric form,
	      for example by its port number.

       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.

RETURN VALUE
       On success 0 is returned, and node and service  names,  if  requested,
       are  filled with NUL-terminated strings, possibly truncated to fit the
       specified buffer lengths.  On error a nonzero value is  returned,  and
       errno is set appropriately.

ERRORS
       EAI_AGAIN
	      The name could not be resolved at this time. Try again later.

       EAI_BADFLAGS
	      The flags parameter has an invalid value.

       EAI_FAIL
	      A non-recoverable 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	  parameters.
	      NI_NAMEREQD  is  set  and the host’s name cannot be located, or
	      neither hostname nor service name were requested.

       EAI_SYSTEM
	      A system error occurred. The error code can be found in  errno.

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

NOTE
       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
       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.

EXAMPLES
       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 *sa;	/* input */
		char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV];

		if (getnameinfo(sa, sa->sa_len, 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
       address mapping.

		struct sockaddr *sa;	/* input */
		char hbuf[NI_MAXHOST];

		if (getnameinfo(sa, sa->sa_len, hbuf, sizeof(hbuf),
		    NULL, 0, NI_NAMEREQD))
		       printf("could not resolve hostname");
		else
		       printf("host=%s\n", hbuf);

CONFORMING TO
       RFC 2553. (See also XNS, issue 5.2.)

SEE ALSO
       getaddrinfo(3),	gethostbyaddr(3), getservbyname(3), getservbyport(3),
       inet_ntop(3), socket(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-for-
       mat-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/proceed-
       ings/usenix2000/freenix/metzprotocol.html



Linux Man Page			  2000-12-11		       getnameinfo(3)