ZeroMQ を使用して、同じマシンで実行中の他のプログラムと通信するプログラムを作成しています。衝突の可能性を避けるために、実行時にポート番号を選択したいと考えています。これを実現するために私が書いたコードの例を次に示します。
#!/usr/bin/perl -Tw
use strict;
use warnings;
my %in_use;
{
local $ENV{PATH} = '/bin:/usr/bin';
%in_use = map { $_ => 1 } split /\n/, qx(
netstat -aunt |\
awk '{print \$4}' |\
grep : |\
awk -F: '{print \$NF}'
);
}
my ($port) = grep { not $in_use{$_} } 50_000 .. 59_999;
print "$port is available\n";
手順は次のとおりです。
netstat -aunt を呼び出す
結果を解析する
netstat リストに表示されない固定範囲の最初のポートを選択します。
これを達成するのにより適したシステムユーティリティはありますか?