Soy el responsable del mantenimiento del módulo XML-LibXSLT y una de las pruebas necesita acceder a una URL no existente. El problema fue que alguien informó que en su sistema existía la URL, así que decidí asignar un puerto aleatorio en localhost donde estoy seguro de que no habrá servicio web. Se hizo así:Perl: cómo reservar de manera portátil un puerto TCP (por lo que habrá una URL no disponible)
# 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";
Ahora, el problema es que el puerto $ se define y válido (con el valor de un puerto reservado) en Linux, pero no parece funcionar en Windows - ver este error informe - https://rt.cpan.org/Ticket/Display.html?id=71456. Mi pregunta es: ¿cómo puedo reservar un puerto nuevo, aleatorio, aún no ocupado de forma portátil en UNIXes, Mac OS X y Windows en Perl 5?
Saludos,
Shlomi pescado
+1. El connect() es innecesario. – EJP
@EJP: Es cierto, apenas recuerdo que Windows adoptó un enfoque un tanto perezoso para la asignación de puertos, al menos para los zócalos enlazados 'INADDR_ANY'. – Hasturkun
El puerto se asigna en la hora de enlace(). – EJP