¿Cómo puedo especificar qué puerto usar en Perl IO :: Socket :: INET?
Pregunta
Estoy utilizando IO :: Socket :: INET para crear inter -process comunicación en mi programa. Necesito usar un número de puerto específico en mi cliente TCP. Estaba siguiendo el ejemplo en Perl doc, pero no funciona. Aquí está mi código:
código antiguo (de trabajo):
tx_socket = new IO::Socket::INET->new('127.0.0.1:8001') || die "Can't connect to 127.0.0.1:8001 : $!\n";
nuevo código (no funciona):
tx_socket = new IO::Socket::INET->new('127.0.0.1:8001', LocalPort=>9000 ) || die "Can't connect to 127.0.0.1:8001 : $!\n";
¿Alguien sabe lo que está mal?
Solución
Fábrica de respuesta de Grant McLean, si se fija la coma que falta, pero "obras" aquí pueden ser relativas a lo que se esperaba.
use IO::Socket::INET;
$sock = IO::Socket::INET->new(
PeerAddr => '127.0.0.1',
PeerPort => 8001,
LocalPort => 9000,
Proto => 'tcp'
);
die("No socket!\n") unless $sock;
print "Socket good!\n";
Al ejecutar este rendimiento:
No socket!
Lo que no se debe a que el código no funciona, está funcionando como se esperaba (en mi caso). Es decir, se espera que una conexión a un puerto localhost 8001 fallará sin nada de escucha en el otro lado. Esto ilustra la utilidad de los informes de errores:
use IO::Socket::INET;
$sock = IO::Socket::INET->new(
PeerAddr => '127.0.0.1',
PeerPort => 8001,
LocalPort => 9000,
Proto => 'tcp'
) or die("$!\n");
die("No socket!\n") unless $sock;
print "Socket good!\n";
¿Qué se ejecuta ahora rendimientos:
Connection refused
Si me quedo escucha netcat en el puerto 8001, me sale un resultado diferente:
Socket good!
Otros consejos
De acuerdo con la documentación , que debería estar haciendo algo como:
$sock = IO::Socket::INET->new(
PeerAddr => '127.0.0.1',
PeerPort => 8001,
LocalPort => 9000,
Proto => 'tcp'
) or die "Connect error: $!";