这是一个稍微模糊的问题,但我很为难,我想也许有人在那里可能有更多的线索上的问题。

我的同事已经成功运行了他的MacBook Pro几个月使用IPv6组播的内部应用程序,但今天苹果决定停止路由组播报文。特别地,该程序将打印这个错误:

SendDataUDP(FF02 ::珠:半寸:契:饲料@ 4)发生故障的网络接口上的[名称= [EN0]描述= [] IP = [FE80 :: 222:41ff:FE21:dfd4 @ 4] =掩码[FFFF:FFFF:FFFF:FFFF ::]广播= [:]](错误= 65 /否到主机的路由)

...这很好说明了什么问题......它试图SENDTO()一个UDP包,显示的IP地址,并发送()的错误号= EHOSTUNREACH失败。

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

有一些方面多播我失踪,或者被他的机器只是borked?他说,他没有任何改变,只是神秘地停止了工作。

有帮助吗?

解决方案

这可能有助于看的内核源。 (尤其是出口IPv6数据包出口路径,ip6_output.c)当你在里面,你也可以看看的套接字调用导致它,等等。

有关组播,假设你正在做它ip6_output(),它看起来像唯一可能的方式来得到这个错误是不指定发送的接口。 (这是因为奇你的错误消息明确提到的界面)

是否有可能,当它之前并不在这款MacBook无线接口已启用,现在“链路本地”多播的概念是模糊的?你明确指定接口时,可以使用socket?在地址的末尾@ 4看起来很奇怪我。 (那是一个接口索引?)的约定,通常是使用%为一个接口范围-ID,但如前面的答案,其评论中指出,它没有得到普遍支持。

其他提示

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

ping6 ff02::1%en0

该联系人的所有主机,所以你应该得到足够的响应(为了好玩,尝试添加-w)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top