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