断开eth0连接时UDP多播失败

断开eth0连接时UDP多播失败,udp,localhost,multicast,loopback,Udp,Localhost,Multicast,Loopback,当我在Raspberry Pi 3上运行此代码段时,以太网电缆已连接,它可以工作并通过UDP多播发送消息,但当以太网断开连接时,如果出现错误消息 import socket from socket import IPPROTO_IPV6 import struct PORT = 26000 ADDR = 'ff01::1' #IPV6 Multicast Address addrInfo = socket.getaddrinfo(ADDR, None)[0] mcast_sock = soc

当我在Raspberry Pi 3上运行此代码段时,以太网电缆已连接,它可以工作并通过UDP多播发送消息,但当以太网断开连接时,如果出现错误消息

import socket
from socket import IPPROTO_IPV6
import struct

PORT = 26000
ADDR = 'ff01::1' #IPV6 Multicast Address

addrInfo = socket.getaddrinfo(ADDR, None)[0]
mcast_sock = socket.socket(addrInfo[0], socket.SOCK_DGRAM)
mcast_sock.setsockopt(IPPROTO_IPV6, socket.IPV6_MULTICAST_HOPS, 1)
mcast_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
mcast_sock.bind(('', PORT))

#Join Multicast grp.
group = socket.inet_pton(addrInfo[0], addrInfo[4][0])
mreq = group + struct.pack('@I', 0)
mcast_sock.setsockopt(IPPROTO_IPV6, socket.IPV6_JOIN_GROUP, mreq)

mcast_sock.sendto(b"Message", (ADDR, PORT))
仅Wlan0接口启动时的错误消息

Traceback (most recent call last):
  File "test.py", line 20, in <module>
    mcast_sock.sendto(b"Message", (ADDR, PORT))
socket.error: [Errno 99] Cannot assign requested address

似乎本地路由支持eth0而不是wlan0

ip -6 route show table local

local ::1 dev lo  proto kernel  metric 256
local ::1 dev lo  proto none  metric 0
local fe80::a4dd:c183:1f7a:5f43 dev lo  proto none  metric 0
ff00::/8 dev eth0  metric 256
ff00::/8 dev wlan0  metric 256
找到了这个解决方案

因此,我运行了以下命令:

ip -6 route add ff01::/16 dev lo table local
然后它就起作用了:)

ip -6 route add ff01::/16 dev lo table local