I have a problem with my client socket server. I have a daemon running in the same script as I have the web server running. the daemon is catching the term (as well as the int, pipe, and hup) signal. when the read process sends a term signal via the kill command to its corresponding write process, I think it is being caught by the daemon code. is there a way to stop this.
also, do you see any problems in the logic of my code? this is my first time doing this and I have already caused serious problems testing my daemon/web server code on my host providers servers. it was looping endlessly and freezing up their system. this is not that code. this is the code with all the email notifications and possible email loops taken out.
the daemon worked great as a stand alone script and the web server worked great as a stand alone script as well. the problems started when I combined the two scripts into one script.
therefore, I wanted to ask the monks about this combined code before trying it in real time again.
#load posix support for trapping signals use POSIX(); #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 sc +ript 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 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 getting a posix daemon and a web server to work together by Hardy
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |