Perl でサーバをテストするためのモジュール Test::TCP の作者 id:tokuhirom が言ってたことだけど、テスト用に空きポートを見つけるのは、bind の port 番号に 0 を渡すのが一番簡単。Perl で書くなら、こんな感じ。 my $unused_port = do { my $l = IO::Socket::INET->new( Listen => 5, LocalHost => '127.0.0.1', LocalPort => 0, Proto => 'tcp', ReuseAddr => 1, ) or die $!; $l->sockport; }; これで確保されるのは emphemeral port なので、取得したポート番号を再び使おうとする間に他のプログラムが (outgoing TCP connection のために) 使っちゃう可能性は論理的