Skip to content
Snippets Groups Projects
test_multicast.c 1.58 KiB
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <sys/socket.h>
#include <arpa/inet.h>

int main() {
    int sockfd_ipv4 = socket(PF_INET, SOCK_STREAM, 0);
    if (sockfd_ipv4 < 0) {
        perror("Could not create ipv4 socket");
        exit(errno);
    }

    struct group_req group_ipv4 = {0};
    struct sockaddr_in *psin_ipv4 = (struct sockaddr_in *) &group_ipv4.gr_group;
    psin_ipv4->sin_family = AF_INET;
    psin_ipv4->sin_port = 1234;
    psin_ipv4->sin_addr.s_addr = htonl(inet_addr("10.10.2.224"));

    if(setsockopt(sockfd_ipv4, IPPROTO_IP, MCAST_JOIN_GROUP, &group_ipv4, sizeof(group_ipv4))) {
        perror("Could not join ipv4 multicast group");
        close(sockfd_ipv4);
        exit(EXIT_FAILURE);
    }

    close(sockfd_ipv4);
    printf("Ipv4 test successfull!\n");


    int sockfd_ipv6 = socket(PF_INET6, SOCK_STREAM, 0);
    if (sockfd_ipv6 < 0) {
        perror("Could not create ipv6 socket");
        exit(errno);
    }

    struct group_req group_ipv6 = {0};
    struct sockaddr_in6 *psin_ipv6 = (struct sockaddr_in6 *) &group_ipv6.gr_group;
    psin_ipv6->sin6_family = AF_INET6;
    psin_ipv6->sin6_port = 1234;
    inet_pton(AF_INET6, "ff02:abcd:0:0:0:0:0:1", &(psin_ipv6->sin6_addr));

    if(setsockopt(sockfd_ipv6, IPPROTO_IPV6, MCAST_JOIN_GROUP, &group_ipv6, sizeof(group_ipv6))) {
        perror("Could not join ipv6 multicast group");
        close(sockfd_ipv6);
        exit(errno);
    }

    close(sockfd_ipv6);
    printf("Ipv6 test successfull!\n");

    return EXIT_SUCCESS;
}