#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX
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, int)
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
