Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C ipv6多播接收_C_Sockets_Ipv6_Multicast_Multicastsocket - Fatal编程技术网

C ipv6多播接收

C ipv6多播接收,c,sockets,ipv6,multicast,multicastsocket,C,Sockets,Ipv6,Multicast,Multicastsocket,我无法接收服务器发送的多播数据包。我可以看到通过tcpdump接收的数据包。有人能告诉我我做错了什么吗?谢谢 struct ipv6_mreq mreq; struct sockaddr_in6 servaddr; sock = socket(AF_INET6,SOCK_DGRAM,0); servaddr.sin6_family = AF_INET6; servaddr.sin6_port = htons(61624); servaddr.sin6_addr = in6addr_any;

我无法接收服务器发送的多播数据包。我可以看到通过tcpdump接收的数据包。有人能告诉我我做错了什么吗?谢谢

struct ipv6_mreq mreq;
struct sockaddr_in6 servaddr;

sock = socket(AF_INET6,SOCK_DGRAM,0);

servaddr.sin6_family = AF_INET6;
servaddr.sin6_port = htons(61624);
servaddr.sin6_addr = in6addr_any;

inet_pton(AF_INET6,"ff38:40:2001::1",&mreq.ipv6mr_multiaddr);

mreq.ipv6mr_interface = 0;
setsockopt(sock,IPPROTO_IPV6,IPV6_JOIN_GROUP, &mreq,sizeof(mreq));
bind(sock,(struct sockaddr *)&servaddr,sizeof(servaddr));
/* using poll to receive data */
零是无效的,应该是“嘿,内核,为我选择一个”接口索引。这不适用于您,很可能是因为您的路由表没有与给定的多播组匹配的显式条目,并且默认路由通过不同的接口


用于解析接口名称并将其存储到
ipv6mru interface
struct ipv6\u mreq

的成员中。是否正在检查任何函数调用的错误返回值?谢谢回复。是的,我添加了对setsockopt和bind返回值的检查。setsockopt返回-1。perror抛出了无效的参数。现在在更改行mreq.ipv6mr\u multiaddr=servaddr.sin6\u addr;到inet\u pton(AF\u INET6,“ff38:40:2001::1”,&mreq.ipv6mr\u multiaddr);我没有看到无效的争论错误。但是仍然无法看到收到的数据包。非常感谢。成功了。但是从web上我看到,将接口索引设置为零将使内核选择默认接口,不是吗?是的,这就是它通常的工作方式。检查路由表,您可能绑定了错误的接口。如果您安装了多个NIC,您肯定不应该依赖内核为您选择默认接口。您需要明确说明您对使用哪个接口感兴趣。