我正在构建 native Bonjour/Zeroconf库,并且需要构建DNS查询记录以广播到其他计算机。我尝试通过Erlang源代码查找,但是由于我对Erlang相对较新,因此有点麻烦了所有inet_XXX.erl和.hrl文件。我有一个用于接收和解析DNS记录有效载荷的监听器,但我只是想不出如何创建查询记录。我真正需要知道的是我需要传递给inet_dns:encode()以获取可以发送的二进制文件。这是我想做的。
{ok,P} = inet_dns:encode(#dns_query{domain="_daap._tcp.local",type=ptr,class=in})
这是我得到的错误
10> test:send().
** exception error: {badrecord,dns_rec}
in function inet_dns:encode/1
in call from test:send/0
11>
最佳答案
我终于弄明白了。
send(Domain) ->
{ok,S} = gen_udp:open(5555,[{reuseaddr,true}, {ip,{224,0,0,251}}, {multicast_ttl,4}, {multicast_loop,false}, {broadcast,true}, binary]),
P = #dns_rec{header=#dns_header{},qdlist=[#dns_query{domain=Domain,type=ptr,class=in}]},
gen_udp:send(S,{224,0,0,251},5353,inet_dns:encode(P)),
gen_udp:close(S).