在Erlang中检测UDP的无法访问端口

时间:2011-09-25 01:39:49

标签: erlang udp icmp

我正在寻找一种方法来检测Erlang中传出UDP数据包的“端口不可达”错误,因此我可以急切地向应用程序报告传输层错误。即,我想捕获ICMP类型3数据包,以向更高层报告数据包尚未到达目的地。

目前我了解两种方法:

  1. 使用未记录的gen_udp:connect/3。但是,似乎这需要为每个新的目标对地址打开一个新套接字:port。优点是这不需要任何特权。
  2. 使用gen_icmp,需要setuid帮助程序或打开原始套接字的功能。
  3. 我还缺少其他变种吗?

1 个答案:

答案 0 :(得分:1)

procket可能是您正在寻找的,但我自己从未使用过它。它是对低级套接字API的绑定,因此它允许您使用底层API支持的所有协议。我只是引用它的自述文件,所以请带上一点盐。