int ACE_TMAIN (int argc, ACE_TCHAR *[]) { // If argc > 1 then allow multiple handlers per-signal, else just // allow 1 handler per-signal. ACE_Sig_Handlers multi_handlers; #if defined (ACE_WIN32) ACE_WFMO_Reactor reactor_impl (argc > 1 ? &multi_handlers : (ACE_Sig_Handler *) 0); #else ACE_Select_Reactor reactor_impl (argc > 1 ? &multi_handlers : (ACE_Sig_Handler *) 0); #endif /* ACE_WIN32 */ ACE_Reactor reactor (&reactor_impl); if (argc > 1) { // Register an "external" signal handler so that the // ACE_Sig_Handlers code will have something to incorporate! ACE_SignalHandler eh = (ACE_SignalHandler) external_handler; ACE_Sig_Action sa (eh); sa.register_action (SIGINT); } // Create a bevy of handlers. Sig_Handler_1 h1 (reactor, "howdy"); Sig_Handler_1 h2 (reactor, "doody"); Sig_Handler_2 h3 (reactor, "tutty"); Sig_Handler_2 h4 (reactor, "fruity"); // Wait for user to type SIGINT and SIGQUIT. for (;;) { ACE_DEBUG ((LM_DEBUG, "\nwaiting for SIGINT or SIGQUIT\n")); if (reactor.handle_events () == -1) ACE_ERROR ((LM_ERROR, "%p\n", "handle_events")); } ACE_NOTREACHED (return 0); }
int run_main (int, ACE_TCHAR *[]) { ACE_START_TEST (ACE_TEXT ("Sig_Handlers_Test")); ACE_Sig_Handlers multi_handlers; ACE_Select_Reactor reactor_impl (&multi_handlers); ACE_Reactor reactor (&reactor_impl); ACE_Reactor::instance (&reactor); // Create a bevy of handlers. Test_SIGINT_Handler h1 (ACE_Reactor::instance (), "h1"); Test_SIGINT_Handler h2 (ACE_Reactor::instance (), "h2"); Test_SIGINT_Handler h3 (ACE_Reactor::instance (), "h3"); Test_SIGINT_Handler h4 (ACE_Reactor::instance (), "h4"); Test_SIGINT_Handler h5 (ACE_Reactor::instance (), "h5"); Test_SIGINT_Handler h6 (ACE_Reactor::instance (), "h6"); Test_SIGINT_Handler h7 (ACE_Reactor::instance (), "h7"); Test_SIGINT_Handler h8 (ACE_Reactor::instance (), "h8"); Test_SIGINT_Shutdown_Handler h0 (ACE_Reactor::instance ()); // Wait for user to type SIGINT. while (!ACE_Reactor::instance ()->reactor_event_loop_done ()) { ACE_DEBUG ((LM_DEBUG,"\nwaiting for SIGINT\n")); if (ACE_Reactor::instance ()->handle_events () == -1) ACE_ERROR ((LM_ERROR,"%p\n","handle_events")); } ACE_END_TEST; return 0; }
void onAccept(int new_fd, const SockAddr& addr) { ScopedFD spfd(new_fd); ErrorCode ec; SocketHelper::setNonBlocking(new_fd, &ec); boost::shared_ptr<Handler> spnewhandler; sp_creator_stg_->create(new_fd, addr, reactor_impl(), spnewhandler); if (!spnewhandler) return; HandlerScoper<Handler> handler_scoper(spnewhandler); spfd.release(); if (sp_filter_stg_.get()) spnewhandler->setFilter(auto_ptr<Filter>(sp_filter_stg_->create(false, spnewhandler.get()))); LOG(info, "accept connection: " << addr << " -> " << this->addr()); if (reactor_impl()->registerHandler(spnewhandler, MASK_READ|MASK_WRITE|MASK_CONNECT, &ec)) handler_scoper.release(); }