链接范围IPv6多播数据包突然无法在MacBook Pro上路由?

时间:2009-08-12 08:35:38

标签: c sockets ipv6 multicast sendto

这是一个有点模糊的问题,但我很难过,我想也许有人可能会对这个问题有更多的线索。

我的同事已经成功运行了一个内部应用程序,在他的MacBook Pro上使用IPv6多播几个月,但今天Mac决定停止路由多播数据包。特别是,程序打印此错误:

网络接口上的

SendDataUDP(ff02 :: bead:cede:deed:feed @ 4)失败[名称= [en0]说明= [] IP = [fe80 :: 222:41ff:fe21:dfd4 @ 4]网络掩码= [ffff:ffff:ffff:ffff ::] Broadcast = [::]](错误= 65 /无主机路由)。

...它很好地描述了出错的地方......它试图将UDP数据包发送到(或)一个UDP数据包到显示的IP地址,而send()则用errno = EHOSTUNREACH发送失败。

我不明白的是,什么可能导致IPv6链路范围多播地址“无法访问”?如果我对链路范围组播的理解是正确的,那么数据包只需要从本地以太网端口出去(在这种情况下为en0,该端口已启动并在该机器上工作)。

我缺少多播的某些方面,还是他的机器只是被塞了?他说他没有做任何改变,只是神秘地停止了工作。

2 个答案:

答案 0 :(得分:2)

要测试en0是否仍能发送链路本地多播请求,请尝试

ping6 ff02::1%en0

这会联系所有主机,因此您应该获得大量响应(为了好玩,请尝试添加-w)。

答案 1 :(得分:2)

查看kernel source可能有所帮助。 (特别是出口IPv6数据包出口路径,ip6_output.c)当你在那里时,你也可以看看导致它的套接字调用等。

对于多播,假设您将其发送到ip6_output(),看起来获得此错误的唯一可能方法是不指定要发送的接口。 (这是奇怪的,因为您的错误消息明确提到了接口)

这台MacBook上的无线接口是否有可能在以前没有启用,现在“链路本地”多播的想法是不明确的?您在使用套接字时是否明确指定了接口?地址末尾的@ 4对我来说很奇怪。 (这是一个接口索引吗?)约定通常是使用%作为接口范围id,但正如前面的答案及其注释中所述,它并不是普遍支持的。

相关问题