Как отправить многоадресные сообщения и снова использовать порт в Erlang?

Я очень доволен МУРАВЬЯМИ RedGate. Единственный другой, который я попробовал, был тем, который идет с Командой Visual Studio, и это сосет.

7
задан 28 June 2010 в 20:31
поделиться

3 ответа

ОБНОВЛЕНО : хорошо, я нашел то, что считаю рабочим решением. Похоже, что решающий момент связан с присоединением к группе многоадресной рассылки .

{ok, Socket} = gen_udp:open(Port=5353, [binary, {active, false}, {reuseaddr, true},
                                        {ip, Addr}, {add_membership, {Addr, IAddr}}]).
  1. Адрес: группа многоадресной рассылки (например, {224, 0, 0, 251}
  2. IAddr - это локальный IP-интерфейс (например, можно использовать по умолчанию {0,0,0,0})

(Конечно, убедитесь, что вы не используете демон DNS, который может вызвать конфликт)

3
ответ дан 7 December 2019 в 14:34
поделиться

Вы пытаетесь открыть сокет, который уже открыт? Разве нельзя использовать один и тот же сокет для отправки и приема?

0
ответ дан 7 December 2019 в 14:34
поделиться

недостаточно респондентов, чтобы ответить на обсуждение {broadcast, true} под сообщением Эмиля, извините.

Флаг сокета SO_BROADCAST (который, как я предполагаю, соответствует) должен быть установлен или sendto (широковещательный адрес) завершится ошибкой. Это предохранитель для предотвращения злоупотреблений или ошибок в программах, которые не предназначались для трансляции. В противном случае безопасным программам пришлось бы самостоятельно пытаться проверять широковещательные адреса.

включение SO_BROADCAST не мешает вам отправлять не широковещательные пакеты. (опять же, предполагая, что материал erlang просто отображается непосредственно в setsockopts; я не знаю erlang, только сеть!)

Вы можете попробовать strace, чтобы увидеть, какие системные вызовы на самом деле происходят. ищите socket (), а затем что происходит с этим файловым дескриптором.

1
ответ дан 7 December 2019 в 14:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: