2016-12-12 10 views
0

Ipv4와 Ipv6 프로토콜 모두에서 멀티 캐스트 그룹에 참여하려고합니다. 멀티 캐스트 그룹에 성공적으로 가입했지만이 tutorial을 사용하는 Ipv6에 성공적으로 가입했지만 관리 할 수 ​​없었습니다. 내 코드는 다음과 같습니다setsockopt는 멀티 캐스트 멤버쉽에 대해 ENOPROTOOPT에 no를 설정합니다.

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를 반환 -1 내가 근무 후 92

+0

'wsdd-> bind' 메소드는 어떻게 정의되어 있습니까? – dbush

+0

링크의 soap_bind 메소드 : https://www.cs.fsu.edu/~engelen/stdsoap2.cpp WITH_IPV6 및 WITH_NO_IPV6_V6ONLY 정의 – rotringuser

답변

1

errno를 설정하여, 내 소켓 AF_INET6를 AF_INET를하지 이상 바인딩 것을 찾을 수 있습니다. 따라서 IPPROTO_IPV6 레벨은 소켓에 대한 옵션이 아닙니다.