我正在編寫一個使用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列表上。
是否有更適合完成此操作的系統實用程序?
甜美!但是,它看起來像bind_to_random_port(...)方法只存在於Python驅動程序中。在查看時,我發現ZMQ v3支持通配符端口號,您可以跟隨getsockopt(ZMQ_LAST_ENDPOINT)。 – ddoxey 2013-03-17 13:50:34