1 #include <sys/socket.h> 2 #include <netinet/in.h> 3 #include <strings.h> 4 #include <err.h> 5 6 int 7 main(int argc, char **argv) 8 { 9 struct sockaddr_in addr1, addr2; 10 int fd1, fd2, enable = 1; 11 12 addr1.sin_family = AF_INET; 13 addr1.sin_port = htons(6666); 14 addr1.sin_addr.s_addr = INADDR_ANY; 15 /* fill sin_zero explicitly with garbage */ 16 memset(addr1.sin_zero, 0xd0, sizeof(addr1.sin_zero)); 17 18 addr2.sin_family = AF_INET; 19 addr2.sin_port = htons(6666); 20 addr2.sin_addr.s_addr = htonl(INADDR_LOOPBACK); 21 /* fill sin_zero explicitly with garbage */ 22 memset(addr2.sin_zero, 0xd0, sizeof(addr2.sin_zero)); 23 24 25 if ((fd1 = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) 26 err(1, "socket1"); 27 28 if (setsockopt(fd1, SOL_SOCKET, SO_REUSEPORT, &enable, 29 sizeof(int)) < 0) 30 err(1, "setsockopt1"); 31 32 if (bind(fd1, (struct sockaddr *)&addr1, sizeof(addr1)) == -1) 33 err(1, "bind1"); 34 35 if ((fd2 = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) 36 err(1, "socket1"); 37 38 if (setsockopt(fd2, SOL_SOCKET, SO_REUSEPORT, &enable, 39 sizeof(int)) < 0) 40 err(1, "setsockopt2"); 41 42 if (bind(fd2, (struct sockaddr *)&addr2, sizeof(addr2)) == -1) 43 err(1, "bind2"); 44 45 return 0; 46 } 47