diff options
Diffstat (limited to 'ACE/examples/C++NPv2/Logging_Acceptor.cpp')
-rw-r--r-- | ACE/examples/C++NPv2/Logging_Acceptor.cpp | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/ACE/examples/C++NPv2/Logging_Acceptor.cpp b/ACE/examples/C++NPv2/Logging_Acceptor.cpp new file mode 100644 index 00000000000..2e7b7479603 --- /dev/null +++ b/ACE/examples/C++NPv2/Logging_Acceptor.cpp @@ -0,0 +1,38 @@ +/* +** $Id$ +** +** Copyright 2002 Addison Wesley. All Rights Reserved. +*/ + +#include "Logging_Acceptor.h" +#include "Logging_Event_Handler.h" + + +int Logging_Acceptor::open (const ACE_INET_Addr &local_addr) { + if (acceptor_.open (local_addr) == -1) return -1; + return reactor ()->register_handler + (this, ACE_Event_Handler::ACCEPT_MASK); +} + +int Logging_Acceptor::handle_input (ACE_HANDLE) { + Logging_Event_Handler *peer_handler = 0; + ACE_NEW_RETURN (peer_handler, + Logging_Event_Handler (reactor ()), + -1); + + if (acceptor_.accept (peer_handler->peer ()) == -1) { + delete peer_handler; + return -1; + } else if (peer_handler->open () == -1) { + peer_handler->handle_close (); + return -1; + } + return 0; +} + +int Logging_Acceptor::handle_close (ACE_HANDLE, + ACE_Reactor_Mask) { + acceptor_.close (); + delete this; + return 0; +} |