Jue Jul 29, 2010 6:41 pm |
|
|
CarlosID
Perlero Nuevo
|
Registrado: Jue Jul 29, 2010 6:30 pm Mensajes: 4
|
|
|
Problemas con IO::Socket::INET RESUELTO
|
Buenas, Estoy haciendo una migración de un aplicación de un servidor a otro, y estoy teniendo un problema con un script en Perl. Os muestro el código (aunque creo que no es relevante): Using perl Syntax Highlighting #!/usr/bin/perl
use IO::Socket::INET;
use CGI qw (-oldstyle_urls :standard);
my $query = new CGI;
my @names = $query->param;
print header('text/html');
$url_query = query_string;
my $rhost = $query->remote_addr();
$http = IO::Socket::INET->new(
PeerAddr => "localhost:80",
Proto => "tcp"
);
my $url = "/CGI/InterCGI.jsp" . "?" . $url_query . "&ipaccess=$rhost";
$http->print("GET /$url HTTP/1.0\n\n");
my @lineas = $http->getlines();
my $esta = 0;
foreach $linea (@lineas) {
if ($esta ==1) {
print $linea;
}
if ($linea=~/Content-Type/) {
$esta = 1;
}
}
Cuando ejecuto el archivo me da el siguiente error: Using text Syntax Highlighting Can't locate IO/Socket/INET.pm in @INC (@INC contains: /usr/perl5/5.00503/sun4-solaris /usr/perl5/5.00503 /usr/perl5/site_perl/5.005/sun4-solaris /usr/perl5/site_perl/5.005 .) at ./InterCGI line 3.
BEGIN failed--compilation aborted at ./InterCGI line 3
Por lo que he estado leyendo, creo que falla porque no tengo bien instalado el módulo IO::Socket::INET, sin embargo, no sé cómo instalar bien este módulo, ¿de donde lo descargo? ¿cómo lo instalo? El SO es Solaris 8 y la versión del Perl, la 5. Por favor, si alguien pudiese echarme una mano se lo agradecería. Gracias y un saludo.
|
Jue Jul 29, 2010 6:55 pm |
|
|
 |
explorer
Administrador
|
Registrado: Dom Jul 24, 2005 6:12 pm Ubicación: Valladolid, España Mensajes: 9492
|
|
|
Re: Problemas con IO::Socket::INET
|
Bienvenido a los foros de Perl en Español, CarlosID. Efectivamente, CarlosID, el mensaje de error indica que Perl no encuentra ese módulo en ninguno de los directorios por defecto. Si no lo tienes instalado, debes primero a probar a instalarlo desde el sistema de paquetes de tu Solaris. Mira a ver si aparece como paquete instalable. No se llamará igual que IO::Socket::INET, sino que quizás libio-socket-perl o algo parecido. Si no lo encuentras, prueba, siendo root, a instalarlo con el comando cpan: cpan IO::Socket::INETSi no te funciona, entonces debes conectarte a su página: IO::Socket::INET, bueno, más bien a la de la distribución IO. Dentro del fichero README vienen las instrucciones para instalarlo siguiendo tres pasos sencillos. Comprueba antes el número de versión, en la matriz de sistemas operativos/versiones con tu versión de Perl... que me suena que es del siglo pasado -literalmente-.
_________________ JF^D Perl programming
|
Jue Jul 29, 2010 8:24 pm |
|
|
CarlosID
Perlero Nuevo
|
Registrado: Jue Jul 29, 2010 6:30 pm Mensajes: 4
|
|
|
Re: Problemas con IO::Socket::INET
|
Hola explorer, gracias por la rápida respuesta. He intentado hacer las 3 cosas que me has indicado, pero no he sido capaz: No he encontrado en los paquetes de mi Solaris nada parecido a libio-socket-perl. He ejecutado el comando cpan IO::Socket::INET, pero me ha empezado a realizar una serie de preguntas que no sabía contestar, las he pasado todas dando al ENTER, pero al final no ha funcionado. Por último, me he descargado el paquete. Como bien has dicho mi versión de Perl es del siglo pasado, por lo que he tenido que descargarme la versión IO-1.20. El primer paso me lo ha realizado bien (perl Makefile.PL), pero en el segundo me da el siguiente error: Using text Syntax Highlighting # make test
cc -c -xO3 -xdepend -DVERSION=\"1.20\" -DXS_VERSION=\"1.20\" -KPIC -I/usr/perl5/5.00503/sun4-solaris/CORE -DI_POLL IO.c
make: cc: Command not found
make: *** [IO.o] Error 127
Me he instalado el paquete gcc, que es donde creo que viene el comando cc, pero nada. ¿Se te ocurre algo más? Muchas gracias y un saludo.
|
Vie Jul 30, 2010 3:03 am |
|
|
 |
salva
Perlero Frecuente
|
Registrado: Jue Ene 03, 2008 3:19 pm Mensajes: 175
|
|
|
Re: Problemas con IO::Socket::INET
|
CarlosID escribió: Estoy haciendo una migración de un aplicación de un servidor a otro, y estoy teniendo un problema con un script en Perl.
Os muestro el código (aunque creo que no es relevante): ¡Ah, si lo es! Tu problema es que estás usando Perl 5.005_03, una versión de hace más de diez años y algunas cosas han cambiado desde entonces. En concreto, la que creo que a ti te afecta es cómo se estructuran los módulos de la familia IO::Socket. Prueba a cambiar la línea que dice use IO::Socket::INET; por use IO::Socket;De todas formas lo que tendrías que hacer es actualizar tu versión de Perl. En SUN Freeware podrás encontrar paquetes para tu versión de Solaris.
|
Vie Jul 30, 2010 4:10 am |
|
|
CarlosID
Perlero Nuevo
|
Registrado: Jue Jul 29, 2010 6:30 pm Mensajes: 4
|
|
|
Re: Problemas con IO::Socket::INET
|
Gracias salva, He intentado hacer lo que me has comentado, cambiado sólo la línea 3. Sin embargo ahora me da este error: Using text Syntax Highlighting # ./InterCGI
Content-Type: text/html; charset=ISO-8859-1
Can't call method "print" on an undefined value at ./InterCGI line 19.
Parece que ha avanzado un poco, pero no del todo... También he probado a cambiar la línea 13, quitando también "::INET" Y el error en este caso es: Using text Syntax Highlighting # ./InterCGI
Content-Type: text/html; charset=ISO-8859-1
IO::Socket: Cannot configure a generic socket at ./InterCGI line 13
En caso de instalar una nueva versión, ¿me recomiendas alguna en especial? Muchas gracias y un saludo.
|
Vie Jul 30, 2010 4:35 am |
|
|
 |
salva
Perlero Frecuente
|
Registrado: Jue Ene 03, 2008 3:19 pm Mensajes: 175
|
|
|
Re: Problemas con IO::Socket::INET
|
CarlosID escribió: Can't call method "print" on an undefined value at ./InterCGI line 19. Por alguna razón la creación del socket falla, y como no haces comprobación de errores, el problema no salta hasta que tratas de utilizar el objeto en la línea 19. Lo que tienes que investigar es por qué falla la creación del socket en la línea 13. Asegúrate de que no tienes problemas de conectividad, que el servidor responde, etc. CarlosID escribió: Parece que ha avanzado un poco, pero no del todo... También he probado a cambiar la línea 13, quitando también "::INET" No, eso no lo tienes que hacer. Tu quieres utilizar la clase IO::Socket::INET, lo que pasa es que en esa antigua versión de Perl, esa clase se define dentro del mismo fichero que IO::Socket y por eso te dije que quitases el ::INET de la sentencia useCarlosID escribió: En caso de instalar una nueva versión, ¿me recomiendas alguna en especial? Pues o la estable más reciente disponible para tu OS o la misma que ya estés utilizando para correr tu programa en otro sitio. En cualquier caso, no te recomiendo nada anterior a la 5.8.8.
|
Vie Jul 30, 2010 5:24 am |
|
|
 |
explorer
Administrador
|
Registrado: Dom Jul 24, 2005 6:12 pm Ubicación: Valladolid, España Mensajes: 9492
|
|
|
Re: Problemas con IO::Socket::INET
|
Y... digo yo... ¿no sería más fácil usar el módulo LWP::Simple? Seguro que ya lo tienes instalado, y con la función get() ya puedes hacer la petición HTTP que estás mostrando en el código.
_________________ JF^D Perl programming
|
Vie Jul 30, 2010 6:30 am |
|
|
CarlosID
Perlero Nuevo
|
Registrado: Jue Jul 29, 2010 6:30 pm Mensajes: 4
|
|
|
Re: Problemas con IO::Socket::INET
|
|
Hola explorer, salva,
Muchas gracias a los dos.
Explorer: no he llegado a probar tu solución, porque salva tenía razón. La máquina en la que estoy probando no tenía acceso a Internet, por eso no podía abrir la conexión. He cambiado "localhost" por la IP local de la máquina con la que me conectaba y ha funcionado.
Muchísimas gracias, muy buen foro este.
Un saludo.
|
|
Página 1 de 1
|
[ 8 mensajes ] |
|
| Reglas del Foro |
No puedes abrir nuevos temas en este Foro No puedes responder a temas en este Foro No puedes editar tus mensajes en este Foro No puedes borrar tus mensajes en este Foro No puedes enviar adjuntos en este Foro
|
|
Socializa |
 |
|