1

这听起来可能很愚蠢。请原谅我对这些东西的有限知识。

是否可以收听多个多播组,或者更准确地说,可以收听一系列地址,例如224.128.*.*?例如,这些通常用 CIDR 网络掩码表示/16

目前我将我的套接字绑定到一个特定的地址: sock.bind((ip, port))。但我需要处理一系列地址。

我很确定这是不可能的。只是想确认一下。

谢谢

4

1 回答 1

0

有点可能。例如:

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.

于 2013-05-01T09:49:48.020 回答