#include #include #include #include #include #include const unsigned short bind_port = 4500; int do_ipv4_bind(char *ip, const unsigned short port) { struct sockaddr_in addr; int sock; int ret; memset(&addr, 0x00, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(port); inet_pton(AF_INET, ip, &(addr.sin_addr)); ret = socket(PF_INET, SOCK_STREAM, 0); if(ret == -1) { return ret; } else { sock = ret; } ret = bind(sock, (struct sockaddr *)&addr, sizeof(addr)); if(ret == -1) { return ret; } else { return sock; } } int do_ipv6_bind(char *ip, const unsigned short port) { struct sockaddr_in6 addr; int sock; int ret; memset(&addr, 0x00, sizeof(addr)); addr.sin6_family = AF_INET6; addr.sin6_port = htons(port); inet_pton(AF_INET6, ip, &(addr.sin6_addr)); ret = socket(PF_INET6, SOCK_STREAM, 0); if(ret == -1) { return ret; } else { sock = ret; } ret = bind(sock, (struct sockaddr *)&addr, sizeof(addr)); if(ret == -1) { return ret; } else { return sock; } } int main(void) { int ipv4_sock = 0; int ipv6_sock = 0; ipv4_sock = do_ipv4_bind("127.0.0.1", bind_port); ipv6_sock = do_ipv6_bind("::1", bind_port); if(ipv4_sock < 0) { printf("ipv4 bind failed\n"); } else { printf("ipv4 bind succeeded\n"); close(ipv4_sock); } if(ipv6_sock < 0) { printf("ipv6 bind failed\n"); } else { printf("ipv6 bind succeeded\n"); close(ipv6_sock); } return 0; }