Обнаружение недоступных портов для UDP в Erlang - PullRequest
4 голосов
/ 25 сентября 2011

Я ищу способ обнаружения ошибок "недостижим порт" для исходящих пакетов UDP в Erlang, чтобы я мог охотно сообщать об ошибках транспортного уровня в приложение. Т.е. я хочу перехватить пакеты ICMP типа 3, чтобы сообщить верхним уровням, что пакет не достиг пункта назначения.

В настоящее время я знаю о двух подходах:

  1. Использовать недокументированное gen_udp:connect/3. Однако, похоже, что для этого требуется открыть новый сокет для каждого нового адреса пары назначения: порт. Преимущество состоит в том, что это не требует никаких привилегий.
  2. Используйте gen_icmp , который требует либо помощника setuid, либо возможностей для открытия необработанных сокетов.

Есть ли другие варианты, которые мне не хватает?

1 Ответ

1 голос
/ 13 октября 2015

procket может быть то, что вы ищете, но я никогда не использовал его сам. Это привязка к низкоуровневому API сокетов, поэтому она позволяет вам использовать все протоколы, которые поддерживает базовый API. Я просто цитирую его README, поэтому, пожалуйста, возьмите его с щепоткой соли.

...