我正在编写一个使用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