2

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

4

0 回答 0