在Python中侦听多播范围

时间:2013-04-30 22:27:38

标签: python networking network-programming multicast

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

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

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

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

由于

1 个答案:

答案 0 :(得分:0)

有点可能。 E.g:

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.它也不是可调的(据我所知)。

编辑:事实上,它可以通过/proc/sys/net/ipv4/igmp_max_memberships在Linux上进行调整。