int socket(int domain, int type, int protocol) { #if DEBUG fprintf(stderr, "socket: domain %d, type %d, protocol %d\n", domain, type, protocol); #endif if (domain != AF_INET) { #if DEBUG fprintf(stderr, "socket: bad domain %d\n", domain); #endif errno= EAFNOSUPPORT; return -1; } if (type == SOCK_STREAM) return _tcp_socket(protocol); if (type == SOCK_DGRAM) return _udp_socket(protocol); #if DEBUG fprintf(stderr, "socket: nothing for domain %d, type %d, protocol %d\n", domain, type, protocol); #endif errno= EPROTOTYPE; return -1; }
DSCRPTR udp_socket(const char *addr,void *cfg) { SKCONF *skcfg = reinterpret_cast<SKCONF *>(cfg); object *pcfg = reinterpret_cast<object *>(skcfg->proto_p); UDPCONF conf; if (pcfg) { conf.ttl = (*pcfg)("ttl", 1); conf.ifname = (*pcfg)("ifname", (char *)NULL); conf.mcast_addr = const_cast<char *>((*pcfg)("group", "239.192.1.2")); skcfg->proto_p = &conf; } DSCRPTR fd = _udp_socket(addr, skcfg); return fd; }
int socket(int domain, int type, int protocol) { int sock_type; sock_type = type & ~SOCK_FLAGS_MASK; #if DEBUG fprintf(stderr, "socket: domain %d, type %d, protocol %d\n", domain, type, protocol); #endif if (domain != AF_INET && domain != AF_UNIX) { #if DEBUG fprintf(stderr, "socket: bad domain %d\n", domain); #endif errno= EAFNOSUPPORT; return -1; } if (domain == AF_UNIX && (sock_type == SOCK_STREAM || sock_type == SOCK_DGRAM || sock_type == SOCK_SEQPACKET)) return _uds_socket(type, protocol); if (domain == AF_INET && sock_type == SOCK_STREAM) return _tcp_socket(type, protocol); if (domain == AF_INET && sock_type == SOCK_DGRAM) return _udp_socket(type, protocol); if (domain == AF_INET && sock_type == SOCK_RAW && protocol == IPPROTO_ICMP) return _raw_socket(type, protocol); if (domain == AF_INET && sock_type == SOCK_RAW && protocol == IPPROTO_UDP) return _raw_socket(type, protocol); #if DEBUG fprintf(stderr, "socket: nothing for domain %d, type %d, protocol %d\n", domain, type, protocol); #endif errno= EPROTOTYPE; return -1; }