#ifndef ISO
optional-type in_port_t
optional-type in_addr_t

type {struct hostent}

element {struct hostent} {char*} h_name
element {struct hostent} {char**} h_aliases
element {struct hostent} int h_addrtype
element {struct hostent} int h_length
element {struct hostent} {char**} h_addr_list

type {struct netent}

element {struct netent} {char*} n_name
element {struct netent} {char**} n_aliases
element {struct netent} int n_addrtype
element {struct netent} uint32_t n_net

type uint32_t

type {struct protoent}

element {struct protoent} {char*} p_name
element {struct protoent} {char**} p_aliases
element {struct protoent} int p_proto

type {struct servent}

element {struct servent} {char*} s_name
element {struct servent} {char**} s_aliases
element {struct servent} int s_port
element {struct servent} {char*} s_proto

macro IPPORT_RESERVED

#if !defined XOPEN2K8 && !defined POSIX2008
// variable int h_errno
allow h_errno

macro HOST_NOT_FOUND
macro NO_DATA
macro NO_RECOVERY
macro TRY_AGAIN
#endif

type {struct addrinfo}
element {struct addrinfo} int ai_flags
element {struct addrinfo} int ai_family
element {struct addrinfo} int ai_socktype
element {struct addrinfo} int ai_protocol
element {struct addrinfo} socklen_t ai_addrlen
element {struct addrinfo} {struct sockaddr*} ai_addr
element {struct addrinfo} {char*} ai_canonname
element {struct addrinfo} {struct addrinfo*} ai_next

macro AI_PASSIVE
macro AI_CANONNAME
macro AI_NUMERICHOST
macro AI_V4MAPPED
macro AI_ALL
macro AI_ADDRCONFIG
macro AI_NUMERICSERV

macro NI_NOFQDN
macro NI_NUMERICHOST
macro NI_NAMEREQD
macro NI_NUMERICSERV
macro NI_DGRAM

macro EAI_AGAIN
macro EAI_BADFLAGS
macro EAI_FAIL
macro EAI_FAMILY
macro EAI_MEMORY
macro EAI_NONAME
macro EAI_SERVICE
macro EAI_SOCKTYPE
macro EAI_SYSTEM
macro EAI_OVERFLOW

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

type socklen_t

allow-header netinet/in.h
allow-header inttypes.h
#endif
