X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=src%2Fmctap.c;h=8125c41e34e1f0aa6eab4265b2da1fc9fdda586f;hb=4f6c7408011df0741cff090df878b5b362a38747;hp=b021d88740e7960f3fc5ce0c5cb46b5e4d64b3c3;hpb=b5038e157d54458fe2145e4ac06f0c2567382624;p=mctap.git diff --git a/src/mctap.c b/src/mctap.c index b021d88..8125c41 100644 --- a/src/mctap.c +++ b/src/mctap.c @@ -51,10 +51,14 @@ static char *formataddress(struct sockaddr *arg, socklen_t arglen) 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); @@ -62,7 +66,10 @@ static int mkmcastsk4(struct in_addr group, int 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); } @@ -70,7 +77,7 @@ static int mkmcastsk4(struct in_addr group, int port) static void test(int fd) { char buf[65536]; - int ret; + int i, ret; struct sockaddr_storage nm; socklen_t nmlen; @@ -82,6 +89,11 @@ static void test(int fd) 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); + } } }