Это немного неясный вопрос, но я в тупике и подумал, что, возможно, кто-то может иметь больше подсказок по этой проблеме.
Мой коллега несколько месяцев успешно запускал собственное приложение, использующее многоадресную рассылку IPv6 на его MacBook Pro, но сегодня Mac решил прекратить маршрутизацию многоадресных пакетов. В частности, программа выводит такую ошибку:
SendDataUDP (ff02 :: bead: cede: deed: feed @ 4) не удалось на сетевом интерфейсе [Name = [en0] Description = [] IP = [fe80 :: 222: 41ff: fe21: dfd4 @ 4] Netmask = [ffff: ffff: ffff: ffff ::] Broadcast = [::]] (errno = 65 / Нет маршрута к хосту).
... что довольно хорошо описывает, что пошло не так ... он попытался sendto () UDP-пакет на указанный IP-адрес, и send () не удалось с errno = EHOSTUNREACH.
Я не понимаю, что могло привести к тому, что адрес многоадресной рассылки IPv6 может стать «недоступным»? Если я правильно понимаю многоадресную рассылку в области связи, пакет должен выходить только через локальный порт Ethernet (в данном случае en0, который запущен и работает на этой машине).
Есть ли какой-то аспект многоадресной рассылки, который мне не хватает, или его машина просто перестала работать? Он говорит, что ничего не менял, просто загадочным образом перестало работать.
2 ответа
Может быть полезно взглянуть на ядро источник. (В частности, исходящий путь исходящего пакета IPv6, ip6_output.c) Находясь там, вы также можете взглянуть на вызовы сокетов, ведущие к нему, и т. Д.
Для многоадресной рассылки, если вы переходите к ip6_output()
, похоже, что единственный возможный способ получить эту ошибку - не указывать интерфейс для отправки. (что странно, поскольку в вашем сообщении об ошибке явно упоминается интерфейс)
Возможно ли, что беспроводной интерфейс на этом MacBook был включен, когда этого не было раньше, и теперь идея многоадресной рассылки «локально по ссылке» неоднозначна? Вы явно указываете интерфейс при использовании сокета? @ 4 в конце адреса мне кажется странным. (Это индекс интерфейса?) Обычно в качестве идентификатора области действия интерфейса используется %
, но, как отмечалось в предыдущем ответе и его комментариях, он не поддерживается повсеместно.
Чтобы проверить, может ли en0 по-прежнему передавать локальные запросы многоадресной рассылки, попробуйте
ping6 ff02::1%en0
Это связывается со всеми хостами, поэтому вы должны получить много ответов (для удовольствия попробуйте добавить -w).
Похожие вопросы
Связанные вопросы
Новые вопросы
c
C - это язык программирования общего назначения, используемый для системного программирования (ОС и встраиваемых), библиотек, игр и кроссплатформенности. Этот тег следует использовать с общими вопросами, касающимися языка C, как это определено в стандарте ISO 9899 (последняя версия 9899: 2018, если не указано иное, а также для запросов, специфичных для версии, с c89, c99, c11 и т. Д.). C отличается от C ++ и не должен сочетаться с тэгом C ++ без разумной причины.