| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- #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 */
|