00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "TGo4SocketSignalHandler.h"
00017
00018 #include <signal.h>
00019 #include <iostream.h>
00020
00021
00022 Int_t TGo4SocketSignalHandler::fgiLastSignal = 0;
00023
00024 TGo4SocketSignalHandler::TGo4SocketSignalHandler(Int_t signum, Bool_t enabled)
00025 {
00026 SetSignalAction(signum,enabled);
00027
00028 }
00029
00030 TGo4SocketSignalHandler::~TGo4SocketSignalHandler()
00031 {
00032 }
00033
00034 void TGo4SocketSignalHandler::Handle(Int_t signum)
00035 {
00036 SetSignalAction(signum,0);
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046 TGo4SocketSignalHandler::fgiLastSignal = signum;
00047 SetSignalAction(signum,1);
00048 }
00049
00050 void TGo4SocketSignalHandler::SetSignalAction(Int_t signum, Bool_t enabled)
00051 {
00052 struct sigaction new_action, old_action;
00053
00054
00055 if(enabled)
00056 new_action.sa_handler = (void(*) (int)) TGo4SocketSignalHandler::Handle ;
00057 else
00058 new_action.sa_handler = SIG_IGN;
00059
00060 sigemptyset (&new_action.sa_mask);
00061 new_action.sa_flags = 0;
00062 sigaction (signum, NULL, &old_action);
00063 if(enabled)
00064 sigaction (signum, &new_action, NULL);
00065 }
00066
00067