Como enviar mensagens multicast e reutilizar uma porta em Erlang?

Eu tive um bom começo no meu programa, meu primeiro programa REAL Erlang. Eu tenho que ouvir mensagens, lê-las e analisá-las. Eu também tenho que enviá-los. A única coisa que está me incomodando é que eu não posso ENVIAR na porta 5353, eu tentei de tudo. Todos os outros aplicativos na minha máquina podem ouvir e enviar na porta 5353, SubEthaEdit, iTunes, iChat.

A solução DEVE ser transmitida na porta 5353 e aqui está o porquê.

"Se a porta UDP de origem em uma Consulta DNS Multicast recebida não for a porta 5353, isso indica que o cliente que originou a consulta é um cliente simples que não implementa totalmente todo o DNS Multicast. Nesse caso, o Respondente DNS Multicast DEVE enviar um Resposta UDP diretamente de volta ao cliente, via unicast, para o endereço IP de origem e porta do pacote de consulta.Esta resposta unicast DEVE ser uma resposta unicast convencional como seria gerada por um servidor DNS unicast convencional, por exemplo, DEVE repetir o ID da consulta e a questão dada no pacote de consulta. "

Todos eles relatam Port: 5353 ao enviar mensagens multicast. Eu realmente quero que meu aplicativo seja legal e faça o mesmo, envie na porta 5353. Aqui está meu módulo como está agora.

-module(zeroconf).

-include("zeroconf.hrl").

-export([open/0,start/0]).
-export([stop/1,receiver/0]).
-export([send/1]).

-define(ADDR, {224,0,0,251}).
-define(PORT, 5353).

send(Domain) ->
    {ok,S} = gen_udp:open(0,[{broadcast,true}]), % I really want this Port to be 5353 :-(
    % this doesn't complain or throw errors but it also doesn't work :-(        
    %{ok,S} = gen_udp:open(?PORT,[{reuseaddr,true}, {ip,?ADDR}, {broadcast,true},multicast_ttl,4}, {multicast_loop,false}, binary]),
    P = #dns_rec{header=#dns_header{},qdlist=[#dns_query{domain=Domain,type=ptr,class=in}]},
    gen_udp:send(S,?ADDR,?PORT,inet_dns:encode(P)),
    gen_udp:close(S).

Aqui está o que alguns resultados parecem.

Esta é uma pergunta de SubEthaEdit procurando outras instâncias na rede local, observe que ele diz porta: 5353

From: {192,168,0,105}
Port: 5353
Data: {ok,{dns_rec,{dns_header,0,true,'query',true,false,false,false,false,0},
                   [],
                   [{dns_rr,"_see._tcp.local",ptr,in,0,0,
                            "jhr@Blackintosh._see._tcp.local",undefined,[],
                            false}],
                   [],[]}}

Agora aqui está uma QUERY do meu módulo procurando instâncias do iTunes na rede local, observe que ele diz Porta: 59795 Com o código do jeito que está agora, essa porta é aleatória. Eu realmente quero que seja 5353.

From: {192,168,0,105}
Port: 59795
Data: {ok,{dns_rec,{dns_header,0,false,'query',false,false,false,false,false,
                               0},
                   [{dns_query,"_daap._tcp.local",ptr,in}],
                   [],[],[]}}

Alguém tem algum conhecimento arcano sobre o multicast UDP? Atualizando para que eu possa tentar e aceitar uma resposta. Eu acho que não posso fazer isso.

questionAnswers(3)

yourAnswerToTheQuestion