#include <sys/socket.h> #include <netdb.h>int getaddrinfo(const char *name, const char *service, const struct addrinfo *req, struct addrinfo **pai)
void freeaddrinfo(struct addrinfo *ai);
char *gai_strerror(int ecode);
Use the name argument to specify a pointer to a null
terminated string containing the service location. The service
location can be a descriptive name or an address in either IPv4 or
IPv6 address notation. If you specify a NULL value for name,
the requested service location is assumed to be local. If a specific
protocol family is not specified in the addrinfo.ai_family
(described later), and the service name is interpreted as valid
within multiple supported families, address information may be
returned for multiple families.
Use the service argument to specify a pointer to a null terminated string containing the service name. If you specify a NULL value for service, the network level address of the service location specified in name is returned.
Use the req argument to specify a pointer to an addrinfo structure that contains parameters to be used when translating name and/or service. The addrinfo structure is shown below:
   struct addrinfo {
      int      ai_flags;                 /* input flags */
      int      ai_family;                /* protocol family for socket */
      int      ai_socktype;              /* socket type */
      int      ai_protocol;              /* protocol for socket */
      int      ai_addrlen;               /* length of socket address */
      struct sockaddr *   ai_addr;    /* socket address for socket */
      char *              ai_canonname;  /* canonical name for service location */
      struct addrinfo *   ai_next;       /* pointer to next in list */
   };
You can specify values for the following structure members when using getaddrinfo.
ai_flagsai_flags member can be set to 0,
AI_PASSIVE and/or AI_CANONNAME. Set
AI_PASSIVE if the returned socket information is to be
used for accepting incoming connections for the specified service. Do
not set AI_PASSIVE if you want to use the returned socket
information to create a connection to the specified service.
Set AI_CANONNAME if you want the canonical name
corresponding to the name pointed to by name to be returned
in ai_canonname. If the canonical name is not available,
ai_canonname will point to the same location as name.
ai_familyai_family to specify the protocol family related
to the service specified by name and service.
Possible values are:
ai_socktypeai_socktype to specify the socket type you want returned.
Possible socket types are:
If you specify 0 for ai_socktype all matching socket
types are returned (the order is implementation
dependent, and cannot be guaranteed to be the same on other systems).
ai_protocolai_protocol to specify the protocol to use in
conjunction with the protocol family specified in ai_family.
Valid protocols include:
If you specify 0 for ai_protocol, the default protocol is used
for the family/socket type. See
socket(3sock).
ai along with any associated additional storage. If
ai_next is not NULL, that is, there is a chain of
addrinfo structures, freeaddrinfo frees
the entire chain.
gai_strerror returns a pointer to a character string that
describes the meaning of one of the EAI_ error codes
(ecodes) returned by getaddrinfo. If the error
code is not one of these, the string returned indicates an unknown error.
 error codes
(ecodes) returned by getaddrinfo. If the error
code is not one of these, the string returned indicates an unknown error.
ai_next member of each structure contains either a
pointer to the next structure in the list,
or NULL if it is in the last structure in the list.
Each structure in the list includes values for
use with a call to socket,
and a socket address for use with connect or,
if AI_PASSIVE is set, with bind.
The ai_family, ai_socktype and ai_protocol
fields are set to appropriate values to be used as
arguments to socket to create a socket suitable for use
with the returned address.
The ai_addr and ai_addrlen fields can be used as
arguments to connect or bind depending on whether
AI_PASSIVE was set in the original call.
RFC 2133
family member has been shortened to 8 bits and a new 8-bit
member inserted before it (len). For more information on the new
sockaddr structures, see
inet(7tcp).