Perl:如何移植保留TCP端口(因此会有一个不可用的URL)

Shl*_*ish 7 unix windows perl networking tcp

我是XML-LibXSLT模块的维护者,其中一个测试需要访问不存在的URL.问题是有人报告说他们的系统上存在URL,所以我决定在localhost上分配一个随机端口,我确信不会有网络服务.这是这样做的:

# 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";
Run Code Online (Sandbox Code Playgroud)

现在,问题是在Linux上定义了$ port并且有效(对于保留端口的值),但它似乎无法在Windows上运行 - 请参阅此错误报告 - https://rt.cpan.org/Ticket /Display.html?id=71456.我的问题是:如何在Perl 5中的UNIX,Mac OS X和Windows上预留一个新的,随机的,尚未占用的端口?

问候,

Shlomi鱼

Has*_*kun 5

您应该能够bind使用端口0访问环回地址(以便为您分配端口).对于奖励积分,你可能想尝试connect套接字自身(可能不需要任何地方,但应该保证它有一个地址)