Event_Server::Event_Server (void) : ACE_Sig_Adapter (ACE_Sig_Handler_Ex (ACE_Reactor::end_event_loop)) // Shutdown the <ACE_Reactor>'s event loop when a SIGINT is // received. { // Register to trap STDIN from the user. if (ACE_Event_Handler::register_stdin_handler (this, ACE_Reactor::instance (), ACE_Thread_Manager::instance ()) == -1) ACE_ERROR ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("register_stdin_handler"))); // Register to trap the SIGINT signal. else if (ACE_Reactor::instance ()->register_handler (SIGINT, this) == -1) ACE_ERROR ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("register_handler"))); }
int ACE_Sig_Adapter::handle_signal (int signum, siginfo_t *siginfo, ucontext_t *ucontext) { ACE_TRACE ("ACE_Sig_Adapter::handle_signal"); switch (this->type_) { case SIG_ACTION: { // We have to dispatch a handler that was registered by a // third-party library. ACE_Sig_Action old_disp; // Make sure this handler executes in the context it was // expecting... this->sa_.register_action (signum, &old_disp); ACE_Sig_Handler_Ex sig_func = ACE_Sig_Handler_Ex (this->sa_.handler ()); (*sig_func) (signum, siginfo, ucontext); // Restore the original disposition. old_disp.register_action (signum); break; } case ACE_HANDLER: this->eh_->handle_signal (signum, siginfo, ucontext); break; case C_FUNCTION: (*this->sig_func_) (signum, siginfo, ucontext); break; } return 0; }
IPC_Server<SVH, PR_AC_2>::IPC_Server (void) : done_handler_ (ACE_Sig_Handler_Ex (ACE_Reactor::end_event_loop)) { }
IPC_Server<SVC_HANDLER, PEER_ACCEPTOR>::IPC_Server (void) : done_handler_ (ACE_Sig_Handler_Ex (ACE_Reactor::end_event_loop)) { }