4

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

目前我知道两种方法:

  1. 使用未记录gen_udp:connect/3的 . 但是,这似乎需要为每个新的目标对地址打开一个新套接字:端口。优点是这不需要任何特权。
  2. 使用gen_icmp,它需要 setuid 帮助程序或打开原始套接字的能力。

我还缺少其他变体吗?

4

1 回答 1

1

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

于 2015-10-13T08:02:21.220 回答