Я ищу способ обнаружения ошибок "недостижим порт" для исходящих пакетов UDP в Erlang, чтобы я мог охотно сообщать об ошибках транспортного уровня в приложение. Т.е. я хочу перехватить пакеты ICMP типа 3, чтобы сообщить верхним уровням, что пакет не достиг пункта назначения.
В настоящее время я знаю о двух подходах:
- Использовать недокументированное
gen_udp:connect/3
. Однако, похоже, что для этого требуется открыть новый сокет для каждого нового адреса пары назначения: порт. Преимущество состоит в том, что это не требует никаких привилегий.
- Используйте gen_icmp , который требует либо помощника setuid, либо возможностей для открытия необработанных сокетов.
Есть ли другие варианты, которые мне не хватает?