我正在构建一个本地 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).
关于erlang - 如何在 Erlang 中构建 DNS 查询记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1740297/