• Publicidad

Duda teórica y puntual de signals en un daemon Perl

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Duda teórica y puntual de signals en un daemon Perl

Notapor monoswim » 2008-07-01 16:40 @736

Hola, tengo un daemon HTTP hecho en Perl que funciona de 10... pero hay algo que funciona bien y no se por qué :? Se las hago fácil:

Creo un server con my $server = IO::Socket::INET->new(...)

Tengo un bucle para las conexiones while ($client = $server->accept()){...}continue{} que las trata con FORK...

Y luego del bucle coloco el código para cuando se termine (que pensaba controlar con una variable escalar que cambiara de valor al capturar algún SIGNAL, lo cual NO FUE NECESARIO)

Cuando le tiro un SIGNAL 2 (int) automáticamente sale del bucle y ejecuta el código que viene luego del while... SIN QUE SE LO MARQUE YO...

¿Es normal esto? ¿Que un kill(2, $pid) corte el bucle? ¿Elimina la conexión al socket de $server? ¿Cómo es que el bucle se corta?

Desde ya muchas gracias... Sé que no es fácil de contestar... jeje... tampoco es vital... funcionar funciona... y muy bien... :-)

Saludos
MonoSwim
Perl Programming Language
Avatar de Usuario
monoswim
Perlero nuevo
Perlero nuevo
 
Mensajes: 452
Registrado: 2003-11-18 16:13 @717
Ubicación: Buenos Aires

Publicidad

Notapor explorer » 2008-07-01 17:42 @779

Creo que lo pone en

http://perldoc.perl.org/perlipc.html#In ... nd-Servers

If accept() is interrupted by a signal then $! will be set to EINTR. If this happens then we can safely continue to the next iteration of the loop and another call to accept(). It is important that your signal handling code doesn't modify the value of $! or this test will most likely fail. In the REAPER subroutine we create a local version of $! before calling waitpid(). When waitpid() sets $! to ECHILD (as it inevitably does when it has no more children waiting), it will update the local copy leaving the original unchanged.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor monoswim » 2008-07-02 08:15 @385

Pero esto está hablando del hijo, la función REAPER y waitpid es para que salga del hijo y el padre siga en otra iteración...

Yo hablo de salir del padre... para detener el servicio...

Saludos
MonoSwim
Perl Programming Language
Avatar de Usuario
monoswim
Perlero nuevo
Perlero nuevo
 
Mensajes: 452
Registrado: 2003-11-18 16:13 @717
Ubicación: Buenos Aires


Volver a Avanzado

¿Quién está conectado?

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