Search code examples
c++socketsipv6multicastgsoap

setsockopt sets error no to ENOPROTOOPT on multicast membership


I am trying to join multicast grup over both Ipv4 and Ipv6 protocol , for Ipv4 I successfully joined multicast group but for Ipv6 using this tutorial but I could not manage it. My code is:

ipv6_mreq m6cast;
sockaddr_in6 group;
inet_pton(AF_INET6, "FF02:0000:0000:0000:0000:0000:0000:000C", &group.sin6_addr);
m6cast.ipv6mr_interface = INADDR_ANY;
m6cast.ipv6mr_multiaddr = group.sin6_addr;
int socket = wsdd->bind(NULL,3702,100);
if (setsockopt(socket,  IPPROTO_IP, IP_ADD_MEMBERSHIP, &mcast, sizeof(mcast)) < 0)
    socket= -1;
std::cout << errno << std::endl; //prints 0
if (setsockopt(socket, IPPROTO_IPV6,IPV6_ADD_MEMBERSHIP , &m6cast, sizeof(m6cast)) < 0)
    socket= -1;
std::cout << errno << std::endl; //prints 92

But setsockopt returns -1 with setting errno to 92.


Solution

  • After I worked on it, I find out that my socket binding over AF_INET not AF_INET6. Because of that, IPPROTO_IPV6 level is not an option for my socket.