#include #include #include #include #include #include #include #include #include #include #define IFACE "igb1" int main(int argc, char **argv) { int sockfd; uint8_t buf[1024]; struct sockaddr_in serveraddr; struct sockaddr_in clientaddr; struct ip_mreq mreq; system("ifconfig " IFACE " 192.168.1.55/24 up"); sleep(2); inet_aton("239.0.0.5", &(mreq.imr_multiaddr)); inet_aton("192.168.1.55", & mreq.imr_interface); sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd < 0) { perror("Can't create socket"); exit(EXIT_FAILURE); } bzero((char *)&serveraddr, sizeof(serveraddr)); serveraddr.sin_family = AF_INET; inet_aton("192.168.1.55", &serveraddr.sin_addr); serveraddr.sin_port = htons(40960); if (bind(sockfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr)) < 0) { perror("can't bind"); exit(EXIT_FAILURE); } for (int i = 0; i < 2; i++) { printf("Add membership\n"); setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)); sleep(2); system("ifmcstat -i " IFACE " -f inet"); #if 1 printf("Drop membership\n"); setsockopt(sockfd, IPPROTO_IP, IP_DROP_MEMBERSHIP, &mreq, sizeof(mreq)); sleep(2); system("ifmcstat -i " IFACE " -f inet"); #endif } exit(EXIT_SUCCESS); }