#include #include #include #include #include #include #include #include #include #include #include #define N 4000000 int main(int argc, char **argv) { struct sockaddr_in6 sin; socklen_t optlen; int fd, setval, getval, i; pid_t pid; if ((fd = socket(AF_INET6, SOCK_STREAM, 0)) == -1) err(1, "socket"); pid = fork(); if (pid == -1) err(1, "fork"); if (pid != 0) { /* * Parent. */ for (i = 0; i < N; i++) { for (setval = 0; setval <= 1; setval++) { if (setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &setval, sizeof(setval)) == -1) { err(1, "setsockopt"); } if (getsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &getval, &optlen) == -1) { err(1, "getsockopt"); } if (setval != getval) { errx(1, "setval (%d) != getval (%d) " "(after %d iterations)", setval, getval, i); } } } printf("parent exiting.\n"); exit(0); } /* exit(0); */ /* * Children. */ if (fork() == -1) err(1, "fork"); for (i = 0; i < N; i++) { for (setval = 0; setval <= 2; setval++) { if (setsockopt(fd, IPPROTO_IPV6, IPV6_PORTRANGE, &setval, sizeof(setval)) == -1) { err(1, "setsockopt"); } } } printf("child exiting.\n"); exit(0); }