首先让我说,我不知道的状态,如果这是一个OSX问题,或者我离开出来的东西不recieving广播:二郎gen_udp时{IP,地址} specificed Socket的
目标我需要指定用于UDP通信的接口适配器,以避免与使用相同端口的其他软件冲突。 (将有2个网络适配器)。
问题:当{IP,地址}选项中指定gen_udp
接口适配器,但是它的工作原理,当我不使用{IP,地址}选项无法按预期接收广播消息。我收到发送到255.255.255.255或192.168.1.255(都是工作)的广播消息。
{ok,Socket} = gen_udp:open(Port,[{broadcast, true},{reuseaddr, true}]).
一旦我添加了{ip,Address}选项来指定使用哪个接口适配器,它将停止接收广播。我可以通过wireshark看到消息,但套接字没有收到它们。
{ok,Socket} = gen_udp:open(Port,[{broadcast, true},{reuseaddr, true},{ip,Address}]).
我注意到在没有使用{ip,Address}选项的情况下,Socket的地址为{0,0,0,0}。通过inet:sockname(Socket)。
我在想什么?
当插座绑定到0.0.0.0它将从任何接口接收。你确定当你使用{ip,Address}时,数据包被发送到你绑定的接口吗? –
当我使用wireshark并选择了目标接口({ip,Address}的接口)时,我可以看到广播信息包。所以我假设数据包正在发送并到达接口。如预期的那样,它们出现在wireshark目的地为255.255.255.255的地方,这与Address不同。所以我认为它们被忽略或者没有被socket处理,因为它们不匹配。当我不使用{ip,Address}但Socket接收数据时,我看到了同样的情况。 – casillic