Я пишу программу, которая использует 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";
Процедура:
Invoke NetStat -aunt
разбора результата
выбрать первый порт на фиксированном диапазоне, который не появляется в списке нетстата.
Есть ли системная утилита, которая лучше подходит для этого?
Сладкий! Однако, похоже, что метод bind_to_random_port (...) существует только для драйвера Python. Если посмотреть на это, я обнаружил, что ZMQ v3 поддерживает номер подстановочного порта, который вы можете отслеживать с помощью getsockopt (ZMQ_LAST_ENDPOINT). – ddoxey