The Open Group Base Specifications Issue 6
IEEE Std 1003.1, 2004 Edition
Copyright © 2001-2004 The IEEE and The Open Group, All Rights reserved.
A newer edition of this document exists here

NAME

netdb.h - definitions for network database operations

SYNOPSIS

#include <netdb.h>

DESCRIPTION

The <netdb.h> header may define the in_port_t type and the in_addr_t type as described in <netinet/in.h>.

The <netdb.h> header shall define the hostent structure that includes at least the following members:

char   *h_name       Official name of the host. 
char  **h_aliases    A pointer to an array of pointers to 
                     alternative host names, terminated by a 
                     null pointer. 
int     h_addrtype   Address type. 
int     h_length     The length, in bytes, of the address. 
char  **h_addr_list  A pointer to an array of pointers to network 
                     addresses (in network byte order) for the host, 
                     terminated by a null pointer. 

The <netdb.h> header shall define the netent structure that includes at least the following members:

char     *n_name      Official, fully-qualified (including the 
                      domain) name of the host. 
char    **n_aliases   A pointer to an array of pointers to 
                      alternative network names, terminated by a 
                      null pointer. 
int       n_addrtype  The address type of the network. 
uint32_t  n_net       The network number, in host byte order. 

The uint32_t type shall be defined as described in <inttypes.h>.

The <netdb.h> header shall define the protoent structure that includes at least the following members:

char   *p_name     Official name of the protocol. 
char  **p_aliases  A pointer to an array of pointers to 
                   alternative protocol names, terminated by 
                   a null pointer. 
int     p_proto    The protocol number. 

The <netdb.h> header shall define the servent structure that includes at least the following members:

char   *s_name     Official name of the service. 
char  **s_aliases  A pointer to an array of pointers to 
                   alternative service names, terminated by 
                   a null pointer. 
int     s_port     The port number at which the service 
                   resides, in network byte order. 
char   *s_proto    The name of the protocol to use when 
                   contacting the service. 

The <netdb.h> header shall define the IPPORT_RESERVED macro with the value of the highest reserved Internet port number.

[OB] [Option Start] When the <netdb.h> header is included, h_errno shall be available as a modifiable lvalue of type int. It is unspecified whether h_errno is a macro or an identifier declared with external linkage. [Option End]

The <netdb.h> header shall define the following macros for use as error values for gethostbyaddr() and gethostbyname():

HOST_NOT_FOUND
NO_DATA
NO_RECOVERY
TRY_AGAIN
Address Information Structure

The <netdb.h> header shall define the addrinfo structure that includes at least the following members:

int               ai_flags      Input flags. 
int               ai_family     Address family of socket. 
int               ai_socktype   Socket type. 
int               ai_protocol   Protocol of socket. 
socklen_t         ai_addrlen    Length of socket address. 
struct sockaddr  *ai_addr       Socket address of socket. 
char             *ai_canonname  Canonical name of service location. 
struct addrinfo  *ai_next       Pointer to next in list. 

The <netdb.h> header shall define the following macros that evaluate to bitwise-distinct integer constants for use in the flags field of the addrinfo structure:

AI_PASSIVE
Socket address is intended for bind().
AI_CANONNAME
Request for canonical name.
AI_NUMERICHOST
Return numeric host address as name.
AI_NUMERICSERV
Inhibit service name resolution.
AI_V4MAPPED
If no IPv6 addresses are found, query for IPv4 addresses and return them to the caller as IPv4-mapped IPv6 addresses.
AI_ALL
Query for both IPv4 and IPv6 addresses.
AI_ADDRCONFIG
Query for IPv4 addresses only when an IPv4 address is configured; query for IPv6 addresses only when an IPv6 address is configured.

The <netdb.h> header shall define the following macros that evaluate to bitwise-distinct integer constants for use in the flags argument to getnameinfo():

NI_NOFQDN
Only the nodename portion of the FQDN is returned for local hosts.
NI_NUMERICHOST
The numeric form of the node's address is returned instead of its name.
NI_NAMEREQD
Return an error if the node's name cannot be located in the database.
NI_NUMERICSERV
The numeric form of the service address is returned instead of its name.
NI_NUMERICSCOPE
For IPv6 addresses, the numeric form of the scope identifier is returned instead of its name.
NI_DGRAM
Indicates that the service is a datagram service (SOCK_DGRAM).
Address Information Errors

The <netdb.h> header shall define the following macros for use as error values for getaddrinfo() and getnameinfo():

EAI_AGAIN
The name could not be resolved at this time. Future attempts may succeed.
EAI_BADFLAGS
The flags had 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
There was a memory allocation failure.
EAI_NONAME
The name does not resolve for the supplied parameters.

NI_NAMEREQD is set and the host's name cannot be located, or both nodename and servname were null.

EAI_SERVICE
The service passed was not recognized for the specified socket type.
EAI_SOCKTYPE
The intended socket type was not recognized.
EAI_SYSTEM
A system error occurred. The error code can be found in errno.
EAI_OVERFLOW
An argument buffer overflowed.

The following shall be declared as functions and may also be defined as macros. Function prototypes shall be provided.

void              endhostent(void);
void              endnetent(void);
void              endprotoent(void);
void              endservent(void);
void              freeaddrinfo(struct addrinfo *);
const char       *gai_strerror(int);
int               getaddrinfo(const char *restrict, const char *restrict,
                      const struct addrinfo *restrict,
                      struct addrinfo **restrict);
struct hostent   *gethostbyaddr(const void *, socklen_t, int);
struct hostent   *gethostbyname(const char *);
struct hostent   *gethostent(void);
int               getnameinfo(const struct sockaddr *restrict, socklen_t,
                      char *restrict, socklen_t, char *restrict,
                      socklen_t, int);
struct netent    *getnetbyaddr(uint32_t, int);
struct netent    *getnetbyname(const char *);
struct netent    *getnetent(void);
struct protoent  *getprotobyname(const char *);
struct protoent  *getprotobynumber(int);
struct protoent  *getprotoent(void);
struct servent   *getservbyname(const char *, const char *);
struct servent   *getservbyport(int, const char *);
struct servent   *getservent(void);
void              sethostent(int);
void              setnetent(int);
void              setprotoent(int);
void              setservent(int);

The type socklen_t shall be defined through typedef as described in <sys/socket.h>.

Inclusion of the <netdb.h> header may also make visible all symbols from <netinet/in.h>, <sys/socket.h>, and <inttypes.h>.


The following sections are informative.

APPLICATION USAGE

None.

RATIONALE

None.

FUTURE DIRECTIONS

None.

SEE ALSO

<netinet/in.h>, <inttypes.h>, <sys/socket.h>, the System Interfaces volume of IEEE Std 1003.1-2001, bind(), endhostent(), endnetent(), endprotoent(), endservent(), getaddrinfo(), getnameinfo()

CHANGE HISTORY

First released in Issue 6. Derived from the XNS, Issue 5.2 specification.

The Open Group Base Resolution bwg2001-009 is applied, which changes the return type for gai_strerror() from char * to const char *. This is for coordination with the IPnG Working Group.

IEEE Std 1003.1-2001/Cor 1-2002, item XBD/TC1/D6/11 is applied, adding a description of the NI_NUMERICSCOPE macro and correcting the getnameinfo() function prototype. These changes are for alignment with IPv6.

End of informative text.

UNIX ® is a registered Trademark of The Open Group.
POSIX ® is a registered Trademark of The IEEE.
[ Main Index | XBD | XCU | XSH | XRAT ]