Многоадресный UDP перестает получать через некоторое время на малину - PullRequest
0 голосов
/ 11 ноября 2018

Я пытаюсь заставить Raspberry (на Raspbian) получать многоадресные UDP-сообщения. Я использую следующий код с Python 3:

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(("239.0.0.1", 22700))
mreq = struct.pack("4sl", socket.inet_aton("239.0.0.1"), socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)

while True:
    data = sock.recv(32).decode("utf8")
    # Do stuff with the received data

Этот код работает нормально, я получаю нужные пакеты, но через некоторое время, обычно 5 минут, sock.recv(32) застревает, и больше ничего не получается. Тот же самый код прекрасно работает на моем компьютере, он работает уже более часа, получая все пакеты.

Кто-нибудь сталкивался с этим на Малине? Заранее спасибо

1 Ответ

0 голосов
/ 18 ноября 2018

Это звучит как типичная проблема IGMP.Такие проблемы частые .Типичный шаблон - все работает как надо и через некоторое время перестает работать.

Какой-то маршрутизатор или коммутатор по пути перестает транспортировать ваши многоадресные пакеты.Найдите в маршрутизаторе параметры для включения / отключения отслеживания IGMP и, возможно, для включения / отключения различных версий IGMP.Попробуйте другой переключатель.Избегайте экзотического оборудования (например, адаптеров PowerLine).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...