简体   繁体   中英

Multicast UDP stop receiving after a while on a raspberry

I'm trying to make a Raspberry (on Raspbian) receiving UDP multicast messages. I'm using the following code with 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

This code is working fine, I'm receiving the desired packets but after a while, usually 5 minutes, the sock.recv(32) gets stuck and nothing is received anymore. The exact same code works perfectly on my computer, it's been running for more than an hour now, receiving all packets.

Has anyone been confronted to this on a Raspberry ? Thanks in advance

This sounds like a typical IGMP problem. These kind of problems are frequent . The typical pattern is that everything works as it should and after some time it stops working.

Some router or switch along the path stops transporting your multicast packets. Look for options in the router to enable/disable IGMP snooping and potentially enable/disable different IGMP versions. Try a different switch. Avoid exotic hardware (like PowerLine adapters).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM