static void handle_connections (ACE_SSL_SOCK_Acceptor &peer_acceptor, size_t &n_handles) { if (ACE_BIT_ENABLED (poll_array[0].revents, POLLIN)) { ACE_SSL_SOCK_Stream new_stream; ACE_INET_Addr client; ACE_Time_Value nonblock (0, 0); // Handle all pending connection requests (note use of "polling" // feature that doesn't block). while (ACE_OS::poll (poll_array, 1, nonblock) > 0) if (peer_acceptor.accept (new_stream, &client) == -1) ACE_OS::perror ("accept"); else { const char *s = client.get_host_name (); ACE_ASSERT (s != 0); ACE_DEBUG ((LM_DEBUG, "(%P|%t) client %s\n", s)); poll_array[n_handles++].fd = new_stream.get_handle (); } } }
int Handler_Factory::create_handler ( ACE_SSL_SOCK_Acceptor &acceptor, Handler * (*handler_factory) (ACE_SSL_SOCK_Stream* ), const char *handler_type) { ACE_SSL_SOCK_Stream* new_stream; ACE_NEW_RETURN (new_stream, ACE_SSL_SOCK_Stream, -1); if (acceptor.accept (*new_stream) == -1) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("accept")), -1); Handler *handler; ACE_ALLOCATOR_RETURN (handler, (*handler_factory) (new_stream), -1); ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%P|%t) spawning %s handler\n"), handler_type)); if (handler->open () == -1) return -1; #if defined (ACE_MT_SAFE) // Spawn a new thread and run the new connection in that thread of // control using the <server> function as the entry point. return handler->activate (); #else handler->svc (); handler->close (0); return 0; #endif /* ACE_HAS_THREADS */ }