Reuse multicast socket address.
authorFredrik Tolf <fredrik@dolda2000.com>
Sat, 9 Aug 2008 14:14:14 +0000 (16:14 +0200)
committerFredrik Tolf <fredrik@dolda2000.com>
Sat, 9 Aug 2008 14:14:14 +0000 (16:14 +0200)
src/mctap.c

index b021d88..437082b 100644 (file)
@@ -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,7 @@ 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);
     return(fd);
 }