我正在尝试UDP
使用perl
IO::Socket::INET
.
我在使用以下参数时遇到困难:
LocalHost => "0.0.0.0"
LocalPort => 0
我想要实现的是:
- 监听所有 NIC,因此使用
0.0.0.0
- 让操作系统选择一个端口,因此
0
使用LocalPort
使用上面的参数TCP
,效果很好。将这些参数用于UDP
时,它不起作用。
我发现可以使用UDP
的是将 a 指定LocalPort
为固定的东西,而根本没有指定LocalHost
,但这不是我需要的。
我拥有的perl代码如下:
my $sock = new IO::Socket::INET(
LocalHost => "0.0.0.0",
LocalPort => 0,
Proto => 'udp') or die "failed $@";
我用来评估我是否达到了我需要的是通过检查lsof -p <pid>
. 下表总结了我在试验中看到的情况:
协议 | 本地主机 | 本地端口 | sockport() 输出 |
lsof -p 输出 |
---|---|---|---|---|
TCP | 0.0.0.0 | 0 | 48589 | TCP *:48589(听) |
UDP | 0.0.0.0 | 0 | 0 | 协议:UDP |
UDP | 未指定 | 50001 | 50001 | UDP *:50001 |
UDP | 的输出hostname() |
0 | 58066 | UDP 主机名:58066 |
UDP | 的输出hostname() |
50001 | 50001 | UDP 主机名:50001 |
第一排的TCP
审判是我想要达到的目标,但UDP
我无法做到。