我正在尝试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我无法做到。