-
-void SignalController::init()
-{
-#ifndef _MSC_VER
- sigset_t signal_set;
-
- sigfillset(&signal_set);
- sigdelset(&signal_set, SIGCHLD);
- sigdelset(&signal_set, SIGSEGV);
- sigdelset(&signal_set, SIGBUS);
- sigdelset(&signal_set, SIGFPE);
-
-#if defined(BOOST_HAS_PTHREADS)
- pthread_sigmask(SIG_BLOCK, &signal_set, NULL);
-#else
-#error The signalhandler works only with pthreads
-#endif
-
- thread = new boost::thread(boost::bind(&SignalController::handle, this));
-
- handler[SIGINT] = new SigIntHandler;
- handler[SIGQUIT] = new SigQuitHandler;
- handler[SIGHUP] = new SigHupHandler;
- handler[SIGTERM] = new SigTermHandler;
- handler[SIGUSR1] = new SigUsr1Handler;
- handler[SIGUSR2] = new SigUsr2Handler;
-#else
- if(!SetConsoleCtrlHandler((PHANDLER_ROUTINE)SignalController::handle, true))
- AnytunError::throwErr() << "Error on SetConsoleCtrlhandler: " << AnytunErrno(GetLastError());
-
- handler[CTRL_C_EVENT] = new CtrlCHandler;
- handler[CTRL_BREAK_EVENT] = new CtrlBreakHandler;
- handler[CTRL_CLOSE_EVENT] = new CtrlCloseHandler;
- handler[CTRL_LOGOFF_EVENT] = new CtrlLogoffHandler;
- handler[CTRL_SHUTDOWN_EVENT] = new CtrlShutdownHandler;