#include "gai_hdr.h"
/*
* Basic error checking of flags, family, socket type, and protocol.
*/
/* include ga_echeck */
int
ga_echeck(const char *hostname, const char *servname,
int flags, int family, int socktype, int protocol)
{
if (flags & ~(AI_PASSIVE | AI_CANONNAME))
return(EAI_BADFLAGS); /* unknown flag bits */
if (hostname == NULL || hostname[0] == '\0') {
if (servname == NULL || servname[0] == '\0')
return(EAI_NONAME); /* host or service must be specified */
}
switch(family) {
case AF_UNSPEC:
break;
#ifdef IPv4
case AF_INET:
if (socktype != 0 &&
(socktype != SOCK_STREAM &&
socktype != SOCK_DGRAM &&
socktype != SOCK_RAW))
return(EAI_SOCKTYPE); /* invalid socket type */
break;
#endif
#ifdef IPv6
case AF_INET6:
if (socktype != 0 &&
(socktype != SOCK_STREAM &&
socktype != SOCK_DGRAM &&
socktype != SOCK_RAW))
return(EAI_SOCKTYPE); /* invalid socket type */
break;
#endif
#ifdef UNIXdomain
case AF_LOCAL:
if (socktype != 0 &&
(socktype != SOCK_STREAM &&
socktype != SOCK_DGRAM))
return(EAI_SOCKTYPE); /* invalid socket type */
break;
#endif
default:
return(EAI_FAMILY); /* unknown protocol family */
}
return(0);
}
/* end ga_echeck */
syntax highlighted by Code2HTML, v. 0.9.1