我正在构建一个原生的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})
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误
10> test:send().
** exception error: {badrecord,dns_rec}
in function inet_dns:encode/1
in call from test:send/0
11>
Run Code Online (Sandbox Code Playgroud)
小智 5
我终于弄明白了。
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).
Run Code Online (Sandbox Code Playgroud)