• Publicidad

Problema con diferentes distribuciones

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Re: Problema con diferentes distribuciones

Notapor davidferrero » 2009-09-03 06:43 @321

Pues si te digo la verdad, funciona de chiripa, porque uso un servidor programado hace 7 años, que funcionaba y lo he ido adecuando a mi proyecto por lo que aún no controlo del todo el funcionamiento, aunque algo he ido aprendiendo, porque al comienzo de todo esto no sabía ni declarar una variable en Perl.

El problema que me encuentro ahora es que el Server no reacciona al accept() fuera de mi máquina Debian y eso es lo que más me mosquea, porque ésta tiene la versión v5.10 de Perl como otra Ubuntu donde hago pruebas y en una funciona y en la otra no, por lo que casi podría descartar el interprete, creo.

El caso es que no entiendo por qué falla. Si te sirve de algo muestro parte del servidor:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. package PerlMonitorServer::Server;
  2.  
  3. use strict;
  4. use POSIX;
  5. use Cwd;
  6. use Socket;
  7. use vars qw($AUTOLOAD);
  8.  
  9. BEGIN {
  10.     my $curr_path = $0;
  11.     $curr_path =~ s/pws\.pl//;
  12.     eval "use lib '${curr_path}lib';
  13.    use PerlMonitorServer::Logs;
  14.    use PerlMonitorServer::Misc;
  15.    use PerlMonitorServer::MONITOR;
  16.    use PerlMonitorServer::Config;
  17. ";
  18.     die "Error loading libraries:\n$@"  if ($@);
  19. } # BEGIN
  20.  
  21. my $curr_path = PerlMonitorServer::Config::getInstalationDirectory;
  22. my $debug = 2;  # SET DEBUG LEVEL
  23. my $server;
  24.  
  25. local $SIG{CHLD} = sub { wait; }  if (defined $Global::UNIX);
  26.  
  27. sub new {
  28.     my $pkg = shift;
  29.     my %hash = (_config => undef,
  30.         _methods => {'GET'=>1,'POST'=>1,'HEAD'=>1},
  31.     );
  32.     my $self = \%hash;
  33.     bless $self, $pkg;
  34.     logDebusg(caller(). " creating new Server object=$self.")
  35.         if ($self->debug > 2);
  36.     $self->config;
  37.     return $self;
  38. } # new
  39.  
  40. sub config {
  41.     my $self = shift;
  42.     logDebug(caller() . " config called.")
  43.         if ($self->debug > 2);
  44.    
  45.     unless (defined $self->{_config}) {
  46.         require PerlMonitorServer::Config;
  47.         $self->{_config} = new PerlMonitorServer::Config();
  48.     } # unless
  49.     return $self->{_config};
  50. } # config
  51.  
  52. sub debug {
  53.     my $self = shift;
  54.     return (@_) ? $debug = shift() : $debug;
  55. } # debug
  56.  
  57. sub server {
  58.     my $self = shift;
  59.     die "Need config to set up server!"  unless ($self->config);
  60.     logDebug(caller(). " server called, has config!")
  61.         if ($self->debug > 2);
  62.  
  63.     unless (defined $server) {
  64.         require PerlMonitorServer::Daemon;
  65.         my $port = PerlMonitorServer::Config::getPort;
  66.         my $ip = PerlMonitorServer::Config::getIP;
  67.  
  68.         $server = new PerlMonitorServer::Daemon(
  69.             LocalAddr => $ip,
  70.             LocalPort => $port,
  71.             Type => SOCK_STREAM,
  72.             Listen => 5,
  73.             Reuse => 1,
  74.         );
  75.     } # unless
  76.  
  77.     while (my $new_sock = $server->accept()) {
  78.         # CODIGO QUE SE ENCARGA DE GESTIONAR LA CONEXION....
  79.  
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4
Última edición por explorer el 2009-09-03 07:08 @339, editado 1 vez en total
Razón: Ortografía, indentación del código
davidferrero
Perlero nuevo
Perlero nuevo
 
Mensajes: 25
Registrado: 2009-07-29 03:12 @175

Publicidad

Re: Problema con diferentes distribuciones

Notapor explorer » 2009-09-03 07:19 @346

Ya veo que en el método config(), se tiene cuidado de no crear más objetos que uno solo para toda la vida del objeto... pero entonces, la función config() en el programa principal está mal... porque SÍ que le estás pidiendo que cree un nuevo objeto en cada situación.

Yo creo que estás usando mal ese módulo...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Problema con diferentes distribuciones

Notapor davidferrero » 2009-09-03 07:55 @372

¿Y eso me puede suponer un error en la definición de Server? En teoría el $self lo que hace no es más que almacenar los datos de configuración en un fichero algo más especial que lo que sería un txt simple. Lo que no sé es por qué esto afecta a la creación del servidor puesto que en teoría en el Debian sobre el que se está utilizando no tiene problemas; el caso es que al probarlo antes de modificar el config no me daba problemas, se ejecutaba correctamente por lo que iré por ahí para ver a qué se debe, y ya comentaré.
Última edición por explorer el 2009-09-03 08:05 @379, editado 1 vez en total
Razón: Ortografía
davidferrero
Perlero nuevo
Perlero nuevo
 
Mensajes: 25
Registrado: 2009-07-29 03:12 @175

Re: Problema con diferentes distribuciones

Notapor davidferrero » 2009-09-04 04:54 @246

Buenas, parece que el problema ha sido parcialmente resuelto.

Resulta que, cómo no, y trabajando con Linux, no se trataba más de un tema de permisos. Necesitaba instalar en modo root para que todo funcionara correctamente. Ni elementos extraños en config ni en el servidor, que seguramente existirán, nada, solamente era ejecutar como root y listo. Ahora me encuentro con ese otro problema, como eliminar esos permisos que son necesarios, pero bueno eso será otro cantar.
davidferrero
Perlero nuevo
Perlero nuevo
 
Mensajes: 25
Registrado: 2009-07-29 03:12 @175

Re: Problema con diferentes distribuciones

Notapor explorer » 2009-09-04 06:06 @296

Sí, un programa necesita ser ejecutado por root en caso de querer usar puertos que estén por debajo del 1024 (creo recordar).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Problema con diferentes distribuciones

Notapor davidferrero » 2009-09-04 06:38 @318

Tienes buena memoria. En teoría los puertos por debajo de 1024 son puertos reservados por lo que necesitas ser root para trabajar con ellos. El caso es que yo creía solventado este problema en el setup.pl de mi aplicación, ya que en teoría tenía el código que si se ejecuta por un puerto reservado y no se hace como root debería alertar, pero creo que esta última parte no la hace del todo bien.

De todas maneras gracias por la ayuda.
davidferrero
Perlero nuevo
Perlero nuevo
 
Mensajes: 25
Registrado: 2009-07-29 03:12 @175

Anterior

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron