#include #include #include #include int main(int argc, char **argv) { struct sockaddr_in addr, addr2; int len, optval = 1; int s1, s2; addr.sin_addr.s_addr = htonl(INADDR_ANY); addr.sin_family = AF_INET; addr.sin_port = 0; s1 = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); s2 = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); bind(s1, (struct sockaddr *)&addr, sizeof(addr)); setsockopt(s1, SOL_SOCKET, SO_REUSEPORT, &optval, sizeof(optval)); setsockopt(s2, SOL_SOCKET, SO_REUSEPORT, &optval, sizeof(optval)); len = sizeof(addr); getsockname(s1, (struct sockaddr *)&addr, (socklen_t *)&len); addr2.sin_addr.s_addr = htonl(INADDR_ANY); addr2.sin_family = AF_INET; addr2.sin_port = addr.sin_port; bind(s2, (struct sockaddr *)&addr2, sizeof(addr)); close(s2); close(s1); return 0; }