日記はScrapboxに移動しました。

How to get an arbitrary empty port

Sometimes we want an arbitrary empty port when testing a server program. The code below works for that case.

#!/usr/bin/env perl
use v5.14;
use IO::Socket::INET;
sub empty_port () {
my $sock = IO::Socket::INET->new(
Prot   => 'tcp',
Listen => 1,
(($^O eq 'MSWin32') ? () : (ReuseAddr => 1)),
);
my $port = $sock->sockport;
$sock->close;
$port;
}
say empty_port;

But the code can violate RFC2750 which says:

Following the policies outlined in [IANA-CONSIDERATIONS], numbers 0-49151 are allocated as standard policy elements by IETF Consensus action, numbers in the range 49152-53247 are allocated as vendor specific (one per vendor) by First Come First Serve, and numbers 53248-65535 are reserved for private use and are not assigned by IANA.

http://tools.ietf.org/html/rfc2750

Conclusion: just use Test::TCP#empty_port();

Leave a Reply

Your email address will not be published. Required fields are marked *