Perl: как переносимо зарезервировать порт TCP (чтобы URL был недоступен)

Я поддерживаю модуль XML-LibXSLT , и один из тестов должен получить доступ несуществующий URL. Проблема заключалась в том, что кто-то сообщил, что в их системе существует URL-адрес, поэтому я решил выделить случайный порт на локальном хосте, где я уверен, что веб-службы не будет. Это было сделано так:

# We reserve a random port to make sure the localhost address is not
# valid. See:
#
# https://rt.cpan.org/Ticket/Display.html?id=52422

my $sock = IO::Socket::INET->new(
    Proto => 'tcp',
);

my $port = $sock->sockport();

$file = "http://localhost:${port}/allow.xml";

Теперь проблема в том, что $ port определен и действителен (для значения зарезервированного порта) в Linux, но, похоже, он не работает в Windows - см. Этот отчет об ошибке - https://rt.cpan.org/Ticket/Display.html?id=71456 . Мой вопрос: как я могу зарезервировать новый, случайный, еще не занятый порт, переносимый для UNIX, Mac OS X и Windows в Perl 5?

С уважением,

Shlomi Fish

7
задан Alan Haggai Alavi 9 October 2011 в 19:44
поделиться