Я очень доволен МУРАВЬЯМИ RedGate. Единственный другой, который я попробовал, был тем, который идет с Командой Visual Studio, и это сосет.
ОБНОВЛЕНО : хорошо, я нашел то, что считаю рабочим решением. Похоже, что решающий момент связан с присоединением к группе многоадресной рассылки .
{ok, Socket} = gen_udp:open(Port=5353, [binary, {active, false}, {reuseaddr, true},
{ip, Addr}, {add_membership, {Addr, IAddr}}]).
(Конечно, убедитесь, что вы не используете демон DNS, который может вызвать конфликт)
Вы пытаетесь открыть сокет, который уже открыт? Разве нельзя использовать один и тот же сокет для отправки и приема?
недостаточно респондентов, чтобы ответить на обсуждение {broadcast, true} под сообщением Эмиля, извините.
Флаг сокета SO_BROADCAST (который, как я предполагаю, соответствует) должен быть установлен или sendto (широковещательный адрес) завершится ошибкой. Это предохранитель для предотвращения злоупотреблений или ошибок в программах, которые не предназначались для трансляции. В противном случае безопасным программам пришлось бы самостоятельно пытаться проверять широковещательные адреса.
включение SO_BROADCAST не мешает вам отправлять не широковещательные пакеты. (опять же, предполагая, что материал erlang просто отображается непосредственно в setsockopts; я не знаю erlang, только сеть!)
Вы можете попробовать strace, чтобы увидеть, какие системные вызовы на самом деле происходят. ищите socket (), а затем что происходит с этим файловым дескриптором.