如何在 Erlang 中获取 UDP 的临时端口?

How to get Ephemeral port for UDP in Erlang?

我正在尝试找到一种打开临时端口的方法(https://en.wikipedia.org/wiki/Ephemeral_port 基本端口,无需提供特定端口号,并且来自临时端口范围) .这适用于通过 UDP 协议的客户端请求。我知道如何通过以下方式为 UDP 通信打开特定端口:

1
{ok,Socket} = gen_udp:open(8000).

但宁愿不必提前知道可用端口号,如果可能的话,只需让系统提供一个。
关于如何在 Erlang 中最好地做到这一点有什么建议或想法吗?


与在 C 中的方法相同:指定端口 0。

1
2
3
4
5
6
7
8
9
10
11
12
1> {ok, S1} = gen_udp:open(0).
{ok,#Port<0.541>}
2> {ok, S2} = gen_udp:open(0).
{ok,#Port<0.547>}
3> {ok, S3} = gen_udp:open(0).
{ok,#Port<0.548>}
4> inet:port(S1).
{ok,55398}
5> inet:port(S2).
{ok,44963}
6> inet:port(S3).
{ok,58993}