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