我的印象是 recvfrom() 为您提供了它正在侦听的 IP 和端口上的下一个数据包,如果它没有在侦听,数据包就会丢失。我们遇到的问题可能是数据包排队等待 recvfrom(),因此即使 recvfrom() 没有主动侦听,它也会侦听并捕获所有数据包。
我找不到这方面的明确文件。有人确定 recvfrom() 的特性是在不被调用时不对数据包进行排队吗?
代码示例:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
mcast_g = socket.inet_aton(group)
mreq = struct.pack('4sL', mcast_g, socket.INADDR_ANY)
s.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
s.bind(('', port))
while True:
data, sender = s.recvfrom(1500)
# Do stuff
# Are packets being queued up here?