Lun Sep 17, 2007 12:16 pm
|
 |
alqui
Perlero Nuevo

|
Registrado: 17 Sep 2007
Mensajes: 27
|
|
| Sockets en Perl: No puede conectar |
|
|
Estoy intentando aprender por encima cómo programar Sockets en perl y no me funciona ni tan solo el programa ejemplo más simple que he encontrado:
| Perl: | #!/usr/bin/perl -w
use IO:: Socket;
$sender = new IO:: Socket:: INET (
PeerAddr => 'localhost' ,
PeerPort => 1999,
Proto => 'tcp',
);
die "No se puede abrir el socket, Motivo: $!\n" unless $sender;
print $sender "MSG : enviando mi mensaje\n";
close $sender; |
Para probarlo, por un lado abro una escucha en el puerto 1999 con netcat:
| Código: |
| [jordi@baby0 ~]$ netcat -l -p 1999 |
Y por otro lado ejecuto el programa y me da este error:
| Código: |
[jordi@baby0 ~]$ ./socketpr2
No se puede abrir el socket, Motivo: No existe el fichero o el directorio
[jordi@baby0 ~]$ |
¿Dónde está el fallo?
Gracias. |
|
|
|

Lun Sep 17, 2007 12:36 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
|
|
|
|
|
Bienvenido a los foros de Perl en Español, alqui.
A mí sí que me funciona. Y ejecutándolo como usuario normal. El netcat recoge el mensaje y termina.
¿El sistema sabe resolver la palabra 'localhost'? ¿Tu usuario tiene permisos para conectarse al puerto 1999? |
|

Lun Sep 17, 2007 2:27 pm
|
 |
alqui
Perlero Nuevo

|
Registrado: 17 Sep 2007
Mensajes: 27
|
|
|
|
|
Hola explorer, gracias por responder.
| explorer escribió: | | ¿El sistema sabe resolver la palabra 'localhost'? |
El sistema sabe resolver "localhost". Además si sustituyo 'localhost' por '127.0.0.1' tampoco me funciona.
| explorer escribió: | | ¿Tu usuario tiene permisos para conectarse al puerto 1999? |
Aunque no se donde se definen los permisos para conectarse a un puerto, me imagino que mi usuario tiene esos permisos, ya que si en vez de usar mi programa uso telnet o netcat si que puedo. Además he probado ejecutar el programa como root y tampoco funciona. |
|
Lun Sep 17, 2007 2:51 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
|
|
|
|
|
| ¿Qué versión de Perl tienes? Haz un perl -V y nos lo mandas. |
|

Lun Sep 17, 2007 3:25 pm
|
 |
alqui
Perlero Nuevo

|
Registrado: 17 Sep 2007
Mensajes: 27
|
|
|
|
|
| Código: |
[jordi@baby0 ~]$ perl -V
Summary of my perl5 (revision 5 version 8 subversion 8) configuration:
Platform:
osname=linux, osvers=2.6.20-arch, archname=i686-linux-thread-multi
uname='linux wohnung 2.6.20-arch #1 smp preempt sat mar 10 10:12:25 cet 2007 i686 amd athlon(tm) xp 2200+ authenticamd gnulinux '
config_args='-des -Dprefix=/usr -Dinstallprefix=/usr -Dman1dir=/usr/man/man1 -Dman3dir=/usr/man/man3 -Doptimize=-march=i686 -O2 -pipe -Dusethreads'
hint=recommended, useposix=true, d_sigaction=define
usethreads=define use5005threads=undef useithreads=define usemultiplicity=define
useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
use64bitint=undef use64bitall=undef uselongdouble=undef
usemymalloc=n, bincompat5005=undef
Compiler:
cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
optimize='-march=i686 -O2 -pipe',
cppflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include'
ccversion='', gccversion='4.1.2', gccosandvers=''
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
alignbytes=4, prototype=define
Linker and Libraries:
ld='cc', ldflags =' -L/usr/local/lib'
libpth=/usr/local/lib /lib /usr/lib
libs=-lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lpthread -lc
perllibs=-lnsl -ldl -lm -lcrypt -lutil -lpthread -lc
libc=/lib/libc-2.5.so, so=so, useshrplib=false, libperl=libperl.a
gnulibc_version='2.5'
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
cccdlflags='-fpic', lddlflags='-shared -L/usr/local/lib'
Characteristics of this binary (from libperl):
Compile-time options: MULTIPLICITY PERL_IMPLICIT_CONTEXT
PERL_MALLOC_WRAP THREADS_HAVE_PIDS USE_ITHREADS
USE_LARGE_FILES USE_PERLIO USE_REENTRANT_API
Built under linux
Compiled at Mar 12 2007 19:08:43
@INC:
/usr/lib/perl5/5.8.8/i686-linux-thread-multi
/usr/lib/perl5/5.8.8
/usr/lib/perl5/site_perl/5.8.8/i686-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.8
/usr/lib/perl5/site_perl/5.8.7/i686-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.7
/usr/lib/perl5/site_perl/5.8.6/i686-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.6
/usr/lib/perl5/site_perl/5.8.5/i686-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.5
/usr/lib/perl5/site_perl/5.8.4/i686-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.4
/usr/lib/perl5/site_perl/5.8.3/i686-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.3
/usr/lib/perl5/site_perl/5.8.2/i686-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.2
/usr/lib/perl5/site_perl/5.8.1/i686-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.1
/usr/lib/perl5/site_perl/5.8.0/i686-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.0
/usr/lib/perl5/site_perl
.
[jordi@baby0 ~]$ |
|
|

Lun Sep 17, 2007 4:14 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
|
|
|
|
|
Salvo detalles menores, es casi igual que el mío...
Pues no lo sé... no sé por qué no te funciona... |
|
Mar Sep 18, 2007 5:54 am
|
 |
monoswim
Vive para Perl en Español

|
Registrado: 18 Nov 2003
Mensajes: 720
Ubicación: Buenos Aires
|
|
|
|
|
¿No habrá un firewall bloqueando esa conexión por ese puerto...?
Aunque sea localmente, tal vez esté molestando...
Saludos |
|
Mar Sep 18, 2007 6:10 am
|
 |
alqui
Perlero Nuevo

|
Registrado: 17 Sep 2007
Mensajes: 27
|
|
|
|
|
No... en este momento no uso ningún firewall. Además, si en vez de usar el programa uso telnet o netcat como cliente, si que puedo hacer una conexión local en el puerto 1999.
Es muy raro... no se que será... que a todos os funcione y en cambio a mi no.... |
|
Mar Sep 18, 2007 7:33 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
|
|
|
|
|
| ¿Tienes la última versión del módulo? |
|

Mar Sep 18, 2007 9:17 am
|
 |
alqui
Perlero Nuevo

|
Registrado: 17 Sep 2007
Mensajes: 27
|
|
|
|
|
A ver si me aclaro:
Creo (no estoy seguro) que tengo la versión 1.29.
De todos modos, para instalar ese módulo, tengo que hacer esto ¿verdad?
| Código: |
| cpan -i IO::Socket |
Pues cuando lo hago, parece que me da error:
| Código: |
CPAN: Storable loaded ok
Going to read /root/.cpan/Metadata
Database was generated on Sat, 08 Sep 2007 23:36:41 GMT
Running install for module IO::Socket
Running make for G/GB/GBARR/IO-1.2301.tar.gz
CPAN: Digest::MD5 loaded ok
Checksum for /root/.cpan/sources/authors/id/G/GB/GBARR/IO-1.2301.tar.gz ok
Scanning cache /root/.cpan/build for sizes
IO-1.2301/
IO-1.2301/IO/
IO-1.2301/IO/Handle.pm
IO-1.2301/IO/Socket.pm
IO-1.2301/IO/Socket/
IO-1.2301/IO/Socket/INET.pm
IO-1.2301/IO/Socket/UNIX.pm
IO-1.2301/IO/Pipe.pm
IO-1.2301/IO/Poll.pm
IO-1.2301/IO/Seekable.pm
IO-1.2301/IO/Dir.pm
IO-1.2301/IO/Select.pm
IO-1.2301/IO/File.pm
IO-1.2301/t/
IO-1.2301/t/io_dup.t
IO-1.2301/t/io_const.t
IO-1.2301/t/io_dir.t
IO-1.2301/t/io_poll.t
IO-1.2301/t/io_file.t
IO-1.2301/t/io_sel.t
IO-1.2301/t/io_tell.t
IO-1.2301/t/test.pl
IO-1.2301/t/io_sock.t
IO-1.2301/t/io_multihomed.t
IO-1.2301/t/io_taint.t
IO-1.2301/t/io_udp.t
IO-1.2301/t/io_unix.t
IO-1.2301/t/io_pipe.t
IO-1.2301/t/io_linenum.t
IO-1.2301/t/io_xs.t
IO-1.2301/t/io_utf8.t
IO-1.2301/t/IO.t
IO-1.2301/poll.h
IO-1.2301/MANIFEST
IO-1.2301/IO.xs
IO-1.2301/META.yml
IO-1.2301/ChangeLog
IO-1.2301/poll.c
IO-1.2301/IO.pm
IO-1.2301/Makefile.PL
IO-1.2301/README
IO-1.2301/SIGNATURE
Removing previously used /root/.cpan/build/IO-1.2301
CPAN.pm: Going to build G/GB/GBARR/IO-1.2301.tar.gz
Checking if your kit is complete...
Looks good
Writing Makefile for IO
cp IO/Handle.pm blib/lib/IO/Handle.pm
cp IO/Dir.pm blib/lib/IO/Dir.pm
cp IO/Socket/INET.pm blib/lib/IO/Socket/INET.pm
cp IO/Poll.pm blib/lib/IO/Poll.pm
cp IO/Seekable.pm blib/lib/IO/Seekable.pm
cp IO/Pipe.pm blib/lib/IO/Pipe.pm
cp IO/Socket.pm blib/lib/IO/Socket.pm
cp IO/Select.pm blib/lib/IO/Select.pm
cp IO/File.pm blib/lib/IO/File.pm
cp IO.pm blib/lib/IO.pm
cp IO/Socket/UNIX.pm blib/lib/IO/Socket/UNIX.pm
/usr/bin/perl /usr/lib/perl5/5.8.8/ExtUtils/xsubpp -typemap /usr/lib/perl5/5.8.8/ExtUtils/typemap IO.xs > IO.xsc && mv IO.xsc IO.c
cc -c -D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -march=i686 -O2 -pipe -DVERSION=\"1.23\" -DXS_VERSION=\"1.23\" -fpic "-I/usr/lib/perl5/5.8.8/i686-linux-thread-multi/CORE" IO.c
cc -c -D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -march=i686 -O2 -pipe -DVERSION=\"1.23\" -DXS_VERSION=\"1.23\" -fpic "-I/usr/lib/perl5/5.8.8/i686-linux-thread-multi/CORE" poll.c
Running Mkbootstrap for IO ()
chmod 644 IO.bs
rm -f blib/arch/auto/IO/IO.so
cc -shared -L/usr/local/lib IO.o poll.o -o blib/arch/auto/IO/IO.so \
\
chmod 755 blib/arch/auto/IO/IO.so
cp IO.bs blib/arch/auto/IO/IO.bs
chmod 644 blib/arch/auto/IO/IO.bs
Manifying blib/man3/IO::Dir.3
Manifying blib/man3/IO::Handle.3
Manifying blib/man3/IO::Socket::INET.3
Manifying blib/man3/IO::Poll.3
Manifying blib/man3/IO::Pipe.3
Manifying blib/man3/IO::Seekable.3
Manifying blib/man3/IO::Socket.3
Manifying blib/man3/IO::Select.3
Manifying blib/man3/IO::File.3
Manifying blib/man3/IO::Socket::UNIX.3
Manifying blib/man3/IO.3
/usr/bin/make -- OK
Running make test
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/IO...............ok
t/io_const.........ok
t/io_dir...........ok
t/io_dup...........ok
t/io_file..........ok
t/io_linenum.......ok
t/io_multihomed....No existe el fichero o el directorio at t/io_multihomed.t line 85.
t/io_multihomed....dubious
Test returned status 2 (wstat 512, 0x200)
DIED. FAILED tests 1-8
Failed 8/8 tests, 0.00% okay
t/io_pipe..........ok
t/io_poll..........ok
t/io_sel...........ok
t/io_sock..........No existe el fichero o el directorio at t/io_sock.t line 41.
t/io_sock..........dubious
Test returned status 2 (wstat 512, 0x200)
DIED. FAILED tests 1-26
Failed 26/26 tests, 0.00% okay
t/io_taint.........ok
t/io_tell..........ok
t/io_udp...........No existe el fichero o el directorio (maybe your system does not have a localhost at all, 'localhost' or 127.0.0.1) at t/io_udp.t line 58.
t/io_udp...........dubious
Test returned status 2 (wstat 512, 0x200)
DIED. FAILED tests 1-7
Failed 7/7 tests, 0.00% okay
t/io_unix..........ok
t/io_utf8..........ok
t/io_xs............ok
Failed Test Stat Wstat Total Fail Failed List of Failed
-------------------------------------------------------------------------------
t/io_multihomed.t 2 512 8 16 200.00% 1-8
t/io_sock.t 2 512 26 52 200.00% 1-26
t/io_udp.t 2 512 7 14 200.00% 1-7
Failed 3/17 test scripts, 82.35% okay. 41/172 subtests failed, 76.16% okay.
make: *** [test_dynamic] Error 255
/usr/bin/make test -- NOT OK
Running make install
make test had returned bad status, won't install without force |
*Sean comprensivos: tengo que reconocer que no tengo mucha idea de Perl... Por un lado estoy aprendiendo Perl prácticamente desde 0, pero por otro lado me urge usarlo para probar cosas con sockets. |
|

Mar Sep 18, 2007 9:55 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
|
|
|
|
|
Pues vaya... te da el MISMO error que en tu programa:
| Código: |
| No existe el fichero o el directorio (maybe your system does not have a localhost at all, 'localhost' or 127.0.0.1) at t/io_udp.t line 58. |
Vamos, que desde dentro de Perl no se sabe qué máquina es 'localhost'.
¿Está definida en el fichero /etc/hosts o en el dns local? |
|
Mar Sep 18, 2007 10:00 am
|
 |
alqui
Perlero Nuevo

|
Registrado: 17 Sep 2007
Mensajes: 27
|
|
|
|
|
Sí que está definido:
| Código: |
[jordi@baby0 ~]$ cat /etc/hosts
#
# /etc/hosts: static lookup table for host names
#
#<ip-address> <hostname.domain.org> <hostname>
127.0.0.1 localhost.localdomain localhost
192.168.1.2 bayby0.baby baby0
192.168.1.1 router.baby router
192.168.1.3 baby1.baby baby1
# End of file
|
De hecho el sistema sí que me reconoce localhost (excepto Perl, según parece). Por ejemplo, como he dicho, puedo hacer:
| Código: |
| telnet localhost 1999 |
|
|
Mar Sep 18, 2007 11:08 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
|
|
|
|
|
¿Has hecho la instalación del módulo siendo root, verdad?
Otra cosa distinta: ¿No se estará ejecutando /usr/bin/perl en una jaula chroot? |
|
Mar Sep 18, 2007 11:34 am
|
 |
alqui
Perlero Nuevo

|
Registrado: 17 Sep 2007
Mensajes: 27
|
|
|
|
|
| explorer escribió: | | Has hecho la instalación del módulo siendo root, verdad? |
Si, si.. lo he intentado instalar como root.
| explorer escribió: | | Otra cosa distinta: ¿No se estará ejecutando /usr/bin/perl en una jaula chroot? |
No. El chroot no lo suelo usar. Solo recuerdo haberlo usado en alguna ocasión muy puntual para arreglar algún fallo grave del sistema, pero no es el caso. |
|
Powered by phpBB © 2001, 2005 phpBB Group
|