I am trying to create a UDP server using perl IO::Socket::INET.
I am facing difficulty with using the following parameters:
LocalHost => "0.0.0.0"LocalPort => 0
What I am trying to achieve is to:
- Listen on all NICs, hence the use of
0.0.0.0 - Have the OS pick a port, hence the use of
0as theLocalPort
Using the parameters above with TCP, works just fine. When using those parameters for UDP, it doesn't work.
What I found to work with UDP, was specifying a LocalPort to something fixed and not specifying LocalHost at all, however this is not what I need.
The perl code I have is as follows:
my $sock = new IO::Socket::INET(
LocalHost => "0.0.0.0",
LocalPort => 0,
Proto => 'udp') or die "failed $@";
What I use to assess if I achieved what I need or not is by checking the output of lsof -p <pid>. The following table summarizes what I am seeing in my trials:
| Protocol | LocalHost | LocalPort | sockport() output |
lsof -p output |
|---|---|---|---|---|
| TCP | 0.0.0.0 | 0 | 48589 | TCP *:48589 (LISTEN) |
| UDP | 0.0.0.0 | 0 | 0 | protocol: UDP |
| UDP | Not specified | 50001 | 50001 | UDP *:50001 |
| UDP | output of hostname() |
0 | 58066 | UDP hostname:58066 |
| UDP | output of hostname() |
50001 | 50001 | UDP hostname:50001 |
The TCP trial in the first row's is what I am trying to achieve but for UDP and I am unable to.