【问题标题】:Listen to multicast ranges in Python在 Python 中监听多播范围
【发布时间】:2013-04-30 22:27:38
【问题描述】:

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

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

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

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

谢谢

【问题讨论】:

标签: python networking network-programming multicast


【解决方案1】:

有点可能。例如:

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 进行调整。

【讨论】:

  • 感谢您的示例。我遇到了这个question,他们说我可以加入尽可能多的团体。你能解释一下你所说的限制“20”组的数量吗?任何参考都会有所帮助。
  • 看来我错了:/proc/sys/net/ipv4/igmp_max_memberships 使您能够在 Linux 上调整它。默认情况下它仍然是 20。
  • 谢谢。得到了一些关于参数的信息。将其放入编辑中。
猜你喜欢
  • 2012-09-03
  • 2017-08-03
  • 2021-10-30
  • 1970-01-01
  • 1970-01-01
  • 2016-11-12
  • 1970-01-01
  • 2017-01-02
  • 1970-01-01
相关资源
最近更新 更多