#!/usr/bin/perl -w -t #load support for strict variables use strict; #load support for sockets use IO::Socket; #load posix support for trapping signals use POSIX(); #load posix support for named pipes use POSIX qw(mkfifo); #start of creating a cross-platform method of determining #the current script path and name use FindBin(); use File::Basename(); use File::Spec::Functions; my $script = File::Basename::basename($0); my $SELF = catfile $FindBin::Bin, $script; #end of creating a cross-platform method of determining #the current script path and name #create a new signal set my $sigset = POSIX::SigSet->new(); #create the action you want performed on terminate signals my $termAction = POSIX::SigAction->new('sigTERM_handler', $sigset, &POSIX::SA_NODEFER); #attach the signal to the action you want performed on terminate signa +ls POSIX::sigaction(&POSIX::SIGTERM, $termAction); . . . #the above would be done for the int, pipe, and hup signals. #start of the sub to run when the terminate signal arrives sub sigTERM_handler { #store the signal sent by the system my $HTPad_signalCaught = shift; #run the handler for all exit signals &HTPad_exitSignalHandler("Terminate", $HTPad_signalCaught); } #end of the sub to run when the terminate signal arrives #start of the handler for all exit signals sub HTPad_exitSignalHandler { #reinstate the passed variables my $HTPad_exitType = shift; my $HTPad_signalCaught = shift; #this daemon handler would also process the int, pipe, and hup signals +. unless (exec($SELF, @ARGV)) { Die "Could not restart the script after a $HTPad_signalCaught signal + was received: $!"; } } #end of the handler for all exit signals #ignore child signals in order to do automatic child reaping $SIG{CHLD} = 'IGNORE'; #enter the web server &HTPad_webSserver(); #start of the web server sub HTPad_webSserver { . . . open a socket . . . #start of the parent server accepting clients while ($HTPad_client = $HTPad_server->accept()) { . . . parent fork() a write process for the client . . . process data from the client . . . #close the write child connection close($HTPad_client); #exit the write child to keep it from accepting new clients exit(1); #should this be 1 or something else? parent fork() a read process for the client . . . process data from the client . . . #send sig term to write child when client closes connection kill ("TERM", $clientWritePID); #close the read child connection close($HTPad_client); #exit the read child to keep it from accepting new clients exit(1); #should this be 1 or something else? } #end of the parent server accepting clients } #end of the web server
In reply to Re^5: getting a posix daemon and a web server to work together
by Hardy
in thread getting a posix daemon and a web server to work together
by Hardy
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |