X-Git-Url: http://git.dolda2000.com/gitweb/?a=blobdiff_plain;f=src%2Fmctap.c;h=52dd294add5f65d9a74a553332a7bee7d9264d11;hb=af3fc4a5b88a7014b43aa092c4e0e5f8fa962ed4;hp=b021d88740e7960f3fc5ce0c5cb46b5e4d64b3c3;hpb=b5038e157d54458fe2145e4ac06f0c2567382624;p=mctap.git diff --git a/src/mctap.c b/src/mctap.c index b021d88..52dd294 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); }