这听起来可能很愚蠢。请原谅我对这些东西的有限知识。
是否可以收听多个多播组,或者更准确地说,可以收听一系列地址,例如224.128.*.*
?例如,这些通常用 CIDR 网络掩码表示/16
。
目前我将我的套接字绑定到一个特定的地址:
sock.bind((ip, port))
。但我需要处理一系列地址。
我很确定这是不可能的。只是想确认一下。
谢谢
这听起来可能很愚蠢。请原谅我对这些东西的有限知识。
是否可以收听多个多播组,或者更准确地说,可以收听一系列地址,例如224.128.*.*
?例如,这些通常用 CIDR 网络掩码表示/16
。
目前我将我的套接字绑定到一个特定的地址:
sock.bind((ip, port))
。但我需要处理一系列地址。
我很确定这是不可能的。只是想确认一下。
谢谢
这有点可能。例如:
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('', 2345))
for i in xrange(255):
print i
mreq = struct.pack("=4sl", socket.inet_aton("224.1.2.%d" % i),
socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
不幸的是,内核限制了一个套接字一次可以加入多少组:它是 20。它也不是可调的(据我所知)。
编辑:它实际上在 Linux 上是可调的,通过/proc/sys/net/ipv4/igmp_max_memberships
.