首先让我说我不确定这是OSX问题还是我要留下一些东西:
目标我需要指定一个用于UDP通信的接口适配器,以避免与使用相同端口的其他软件发生冲突。 (将有2个网络适配器)。
问题:在gen_udp中使用{ip,Address}选项指定接口适配器时,不接收广播消息
但是当我不使用{ip,Address}选项时,它会按预期工作。我收到发送到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}。 via inet:sockname(Socket)。
我错过了什么?
答案 0 :(得分:1)
要获取广播数据包,必须将套接字绑定到broadcast address例如,如果要在常规UNIX设置中将接口广播到接口lo
,则可以将Address
设置为{127,255,255,255}
:
{ok, IfList} = inet:getifaddrs(),
{_, LoOpts} = proplists:lookup("lo", IfList),
{_, Address} = proplists:lookup(broadaddr, LoOpts)