Print packet contents from test code.
[mctap.git] / src / mctap.c
index b021d88..8125c41 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,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);
+       }
     }
 }