Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #include "TGo4SocketSignalHandler.h"
00015
00016
00017 Int_t TGo4SocketSignalHandler::fgiLastSignal = 0;
00018
00019 TGo4SocketSignalHandler::TGo4SocketSignalHandler(Int_t signum, Bool_t enabled)
00020 {
00021 SetSignalAction(signum,enabled);
00022 }
00023
00024 TGo4SocketSignalHandler::~TGo4SocketSignalHandler()
00025 {
00026 }
00027
00028
00029 void TGo4SocketSignalHandler::Handle(int signum)
00030 {
00031 SetSignalAction(signum,0);
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 TGo4SocketSignalHandler::fgiLastSignal = signum;
00042 SetSignalAction(signum,1);
00043 }
00044
00045 #ifndef WIN32
00046
00047 #include <signal.h>
00048
00049 void TGo4SocketSignalHandler::SetSigWINCH(Bool_t enabled)
00050 {
00051 SetSignalAction(SIGWINCH, enabled);
00052 }
00053
00054 void TGo4SocketSignalHandler::SetSignalAction(Int_t signum, Bool_t enabled)
00055 {
00056 struct sigaction new_action, old_action;
00057
00058
00059 if(enabled)
00060 new_action.sa_handler = TGo4SocketSignalHandler::Handle;
00061 else
00062 new_action.sa_handler = SIG_IGN;
00063
00064 sigemptyset (&new_action.sa_mask);
00065 new_action.sa_flags = 0;
00066 sigaction (signum, NULL, &old_action);
00067 if(enabled)
00068 sigaction (signum, &new_action, NULL);
00069 }
00070
00071 void TGo4SocketSignalHandler::DisableSigPipe()
00072 {
00073 signal(SIGPIPE, SIG_IGN);
00074 }
00075
00076 bool TGo4SocketSignalHandler::IsLastSignalWINCH()
00077 {
00078 return GetLastSignal() == SIGWINCH;
00079 }
00080
00081 #else
00082
00083
00084
00085 void TGo4SocketSignalHandler::SetSignalAction(Int_t signum, Bool_t enabled)
00086 {
00087 }
00088
00089 void TGo4SocketSignalHandler::DisableSigPipe()
00090 {
00091 }
00092
00093 void TGo4SocketSignalHandler::SetSigWINCH(Bool_t)
00094 {
00095 }
00096
00097 bool TGo4SocketSignalHandler::IsLastSignalWINCH()
00098 {
00099 return false;
00100 }
00101
00102 #endif
00103
00104 Int_t TGo4SocketSignalHandler::GetLastSignal()
00105 {
00106 return fgiLastSignal;
00107 }
00108
00109 void TGo4SocketSignalHandler::SetLastSignal(Int_t v)
00110 {
00111 fgiLastSignal = v;
00112 }
00113
00114