TCP/IP Programming Manual
 (char *)&ttlget, &getsize))
 perror("GET MULTI TTL error");
 printf ("GET TTL: %d, size: %d \n",ttlget, getsize);
 /* Join multicast groups */
 multi_req.imr_interface.s_addr = thisaddr;
 for (i = 1, multiaddr = multiaddr0; i <= IP_MAX_MEMBERSHIPS;
 i++, multiaddr += MAGIC_NUMBER) {
 multi_req.imr_multiaddr.s_addr = multiaddr;
 printf ("ADDing MEMBERSHIP to group: %s or %lx\n",
 inet_ntoa (multi_req.imr_multiaddr) ,
 multi_req.imr_multiaddr.s_addr);
 printf (" ON I/F: %s\n", inet_ntoa(multi_req.imr_interface));
 if (setsockopt (fd1, IPPROTO_IP, IP_ADD_MEMBERSHIP,
 (char *)&multi_req, sizeof(multi_req))) {
 perror ("ADD MEMBER error");
 printf (" error code: %x Hex (%d.)\n", errno, errno);
 }
 }
 /* Bind */
 sin.sin_family = AF_INET;
 sin.sin_port = portNum;
 sin.sin_addr.s_addr = INADDR_ANY;
 len = sizeof(sin);
 if (bind (fd1, (struct sockaddr *)&sin, len) < 0) {
 perror ("Bind Failure");
 exit (0);
 }
 /* Receive from multicast */
 fromlen = sizeof(from);
 i = 1;
 while (1) { /* standby for receiving always */
 printf ("\n\n.............................\n");
 printf (".............................\n");
 printf (".............................\n");
 printf (".............................\n");
 printf ("... LOOP %d\n", i);
 printf (".............................\n");
 printf (".............................\n\n\n");
 /* For every 10 loop, add some */
 if ((i % 10) == 0) { /* memberships */
 printf ("ADD every other 3 group memberships\n");
 for (j = 1, multiaddr = multiaddr0;
 j <= IP_MAX_MEMBERSHIPS;
 j += 3, multiaddr += (MAGIC_NUMBER * 3)) {
 multi_req.imr_multiaddr.s_addr = multiaddr;
 printf ("ADD MEMBERSHIP to group: %s or %lx\n",
 inet_ntoa (multi_req.imr_multiaddr),
 multi_req.imr_multiaddr.s_addr);
 printf (" ON I/F: %s\n", inet_ntoa(multi_req.imr_interface));
 if (setsockopt (fd1, IPPROTO_IP, IP_ADD_MEMBERSHIP,
 (char *)&multi_req, sizeof(multi_req))) {
 perror ("ADD MEMBER error");
 printf (" error code: %x Hex (%d.)\n", errno, errno);
 }
 }
 }
 else /* For every x5 loop, drop some */
 if ((i % 5) == 0) { /* memberships */
 printf ("DROP every other 3 group memberships\n");
 for (j = 1, multiaddr = multiaddr0;
230 Sample Programs










