В моей сети есть многоадресное IPTV.
Все каналы имеют многоадресные адреса, например 239.0.1. *.
Устройство Streamer отправляет данные 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.
НО.
В Erlang я не могу определить канал, к которому принадлежит входящий пакет, потому что данные UDP приходят в виде сообщений:
{udp, Socket, IP, PortNo, Packet},
, где IP и PortNo - это адрес источника (в моем случае 10.33.33.32) и порт (49152).
Таким образом, вопрос - как определить IP-адрес назначения входящего многоадресного пакета UPD.
Windows 7, Erlang 5.9 / OTP R15B.
Спасибо!