int procket_open_socket(PROCKET_STATE *ps) { switch (ps->protocol) { case IPPROTO_ICMP: /* getaddrinfo(3): node for SOCK_RAW must not be NULL */ if (ps->address == NULL) { char *ipaddr = ps->family == AF_INET6 ? "::" : "0.0.0.0"; ps->address = strdup(ipaddr); if (ps->address == NULL) return -1; } /* getaddrinfo(3): port for SOCK_RAW must NULL */ free(ps->port); ps->port = NULL; /* fall through */ case IPPROTO_TCP: case IPPROTO_UDP: if (procket_lookup_socket(ps) < 0) return -1; break; default: if (procket_create_socket(ps) < 0) return -1; break; } return 0; }
int procket_open_socket(PROCKET_STATE *ps) { switch (ps->protocol) { case IPPROTO_TCP: case IPPROTO_UDP: if (procket_lookup_socket(ps) < 0) return -1; break; default: if (procket_create_socket(ps) < 0) return -1; break; } return 0; }