Erlang:在同一端口上接收多个组播流

时间:2012-02-13 00:02:27

标签: sockets erlang udp multicast

我的网络中有一个基于组播的IPTV。 所有频道都有像239.0.1。*这样的多播地址。 流媒体设备将UDP数据发送到目标端口1234。 因此,为了接收电视流,我通常会这样做:

{ok, S} = gen_udp:open(1234, ....
inet:setopts(S, [{add_membership, {{239,0,1,2}, {0,0,0,0}}}]),

有效。

现在我想订阅多个频道同时接收多个流。 所以我再打一次电话:

inet:setopts(S, [{add_membership, {{239,0,1,3}, {0,0,0,0}}}]),

它也有效。我在Wireshark中看到了两个流。我可以通过目标IP地址区分它们 - 239.0.1.2和239.0.1.3。

BUT。

在Erlang中我无法找出传入数据包所属的通道,导致UDP数据作为消息到达:

{udp, Socket, IP, PortNo, Packet},

其中IP和PortNo是源地址(在我的情况下是10.33.33.32)和端口(49152)。

所以问题是 - 如何确定传入的组播UPD数据包的目标IP地址。

Windows 7,Erlang 5.9 / OTP R15B。

谢谢!

1 个答案:

答案 0 :(得分:0)

这应该从收到的UDP数据中检索目标IP:

{udp, Socket, IP, PortNo, Packet},
{ok, {Address, Port}} = inet:sockname(Socket),

地址将包含{239,0,1,3}之类的元组。