static int mkmcastsk4(struct in_addr group, int port)
{
int fd;
+ int soval;
struct sockaddr_in nm;
struct ip_mreqn mreq;
fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
+ soval = 1;
+ if(setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &soval, sizeof(soval)))
+ return(-1);
memset(&nm, 0, sizeof(nm));
nm.sin_family = AF_INET;
nm.sin_port = htons(port);
return(-1);
memset(&mreq, 0, sizeof(mreq));
mreq.imr_multiaddr = group;
- if(setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)))
+ if(setsockopt(fd, SOL_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)))
+ return(-1);
+ soval = 1;
+ if(setsockopt(fd, SOL_IP, IP_MULTICAST_LOOP, &soval, sizeof(soval)))
return(-1);
return(fd);
}
static void test(int fd)
{
char buf[65536];
- int ret;
+ int i, ret;
struct sockaddr_storage nm;
socklen_t nmlen;
exit(1);
}
printf("%s %i:\n", formataddress((struct sockaddr *)&nm, nmlen), ret);
+ for(i = 0; i < ret; i++) {
+ printf("%02x ", (unsigned char)buf[i]);
+ if(i % 20 == 0)
+ putchar(10);
+ }
}
}