4
我正在尋找一種方法來檢測Erlang中的傳出UDP數據包的「端口不可達」錯誤,以便我可以將傳輸層錯誤熱切地報告給應用程序。即,我想要捕獲ICMP類型3數據包,以向高層報告數據包尚未到達目的地。在Erlang中檢測UDP的不可達端口
目前我所知道的兩種方法:
- 使用無證
gen_udp:connect/3
。但是,似乎需要爲每個新的目的地址地址打開一個新的套接字:端口。優點是這不需要任何特權。 - 使用gen_icmp需要setuid助手或能力來打開原始套接字。
是否還有其他變種我缺少?
如果你想測試UDP,你爲什麼認爲ICMP會幫助你? Afaik ICMP僅提供整個機器的更基本的ping,而不是特定的端口。 – ZeissS
@ZeissS:因爲無法訪問的端口(以及許多其他條件)通過ICMP報告。 –
基本上,當你將UDP數據包發送到沒有監聽套接字的端口時,你(可能或不可能 - 取決於網絡配置,遠程主機配置等)接收ICMP類型3,代碼3數據包,其中包含有關目標地址和端口的信息。 –