setsockopt 在多播成员资格上将错误号设置为 ENOPROTOOPT
setsockopt sets error no to ENOPROTOOPT on multicast membership
我正在尝试通过 Ipv4 和 Ipv6 协议加入多播组,对于 Ipv4,我成功加入了多播组,但对于 Ipv6,使用此 tutorial 但我无法管理它。我的代码是:
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
但是 setsockopt returns -1 将 errno 设置为 92。
在我处理它之后,我发现我的套接字绑定在 AF_INET 而不是 AF_INET6。因此,IPPROTO_IPV6 级别不是我的套接字的选项。
我正在尝试通过 Ipv4 和 Ipv6 协议加入多播组,对于 Ipv4,我成功加入了多播组,但对于 Ipv6,使用此 tutorial 但我无法管理它。我的代码是:
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
但是 setsockopt returns -1 将 errno 设置为 92。
在我处理它之后,我发现我的套接字绑定在 AF_INET 而不是 AF_INET6。因此,IPPROTO_IPV6 级别不是我的套接字的选项。