TCP/IP Programming Manual

if (setsockopt (fd1, IPPROTO_IP, IP_MULTICAST_IF,
(char *)&in_addr_this, sizeof(in_addr_this))) {
perror ("SET MULTI IF error");
exit (0);
}
if (getsockopt (fd1, IPPROTO_IP, IP_MULTICAST_IF,
(char *)&in_addr_gmulti, &getsize)) {
perror ("GET MULTI IF error");
exit (0);
}
printf ("GET Multicast I/F: %s, size: %d\n", inet_ntoa(in_addr_gmulti),
getsize);
/* Disable multicast loopback */
loopbkset = 0;
if (setsockopt (fd1, IPPROTO_IP, IP_MULTICAST_LOOP,
(char *)&loopbkset, sizeof(loopbkset))) {
perror ("SET MULTI LOOP error");
exit (0);
}
printf ("Multicast loopback is disabled\n");
/* Set multicast TTL */
ttlget = 0;
printf ("SETting TTL to %d\n",ttlset);
if (setsockopt (fd1, IPPROTO_IP, IP_MULTICAST_TTL,
(char *)&ttlset, sizeof(ttlset)))
perror("SET MULTI TTL error");
if (getsockopt (fd1, IPPROTO_IP, IP_MULTICAST_TTL,
(char *)&ttlget, &getsize))
perror("GET MULTI TTL error");
printf ("GET TTL: %d, size: %d \n",ttlget, getsize);
***************/
/* Send data to the multicast groups */
to.sin_family = AF_INET;
to.sin_port = portNum;
tolen = sizeof(to);
srand((unsigned int) timenow); /* initialize random number gen */
for (i = 0; i < loopCount; i++) {
printf ("Loop: %d\n", i+1);
for (j = 0, multiaddr = multiaddr0; (j < IP_MAX_MEMBERSHIPS);
j++, multiaddr += MAGIC_NUMBER) {
to.sin_addr.s_addr = multiaddr;
ascptr = inet_ntoa (to.sin_addr);
for (k = 0; *ascptr != 0; k++)
sendbuf[k] = *ascptr++;
for (;k < 15; k++)
sendbuf[k] = *chr;
timenow = time(NULL);
if ((xcount = sendto (fd1, sendbuf, req_count, 0,
(struct sockaddr *)&to, tolen)) < 0) {
perror (" Sendto failure");
exit (0);
}
else
printf ("%s SENDTO completed %i bytes to: %s\n", ctime(&timenow),
xcount, inet_ntoa(to.sin_addr));
dtime = (rand() % 150) + 50L; /* 0.5 - 2 seconds */
DELAY (dtime);
} /* end for j loop */
dtime = 100L; /* 1 second */
DELAY (dtime);
} /* end for i loop */
Programs Using AF_INET Sockets 227