logging_handler.cpp
来自「ACE自适配通信环境(ADAPTIVE Communication Enviro」· C++ 代码 · 共 165 行
CPP
165 行
// Logging_Handler.cpp,v 4.18 2004/10/27 21:06:58 shuston Exp#include "ace/Log_Msg.h"#include "Logging_Handler.h"#include "Reactor_Singleton.h"#include "ace/Log_Record.h"#include "ace/OS_NS_string.h"ACE_RCSID(simple_server, Logging_Handler, "Logging_Handler.cpp,v 4.18 2004/10/27 21:06:58 shuston Exp")// Default constructor.Logging_Handler::Logging_Handler (void){}Logging_Handler::~Logging_Handler (void){ // Make sure there are no timers. REACTOR::instance ()->cancel_timer (this); this->cli_stream_.close ();}// Extract the underlying ACE_SOCK_Stream (e.g., for purposes of// accept()).ACE_SOCK_Stream &Logging_Handler::peer (void){ return this->cli_stream_;}intLogging_Handler::handle_timeout (const ACE_Time_Value &, const void *arg){#if defined (ACE_NDEBUG) ACE_UNUSED_ARG (arg);#endif /* ACE_NDEBUG */ ACE_ASSERT (arg == this); ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%P|%t) handling timeout from this = %@\n"), this)); return 0;}// Perform the logging record receive.intLogging_Handler::handle_input (ACE_HANDLE){ ssize_t n; size_t len; // Perform two recv's to emulate record-oriented semantics. Note // that this code is not entirely portable since it relies on the // fact that sizeof (ssize_t) is the same on both the sender and // receiver side. To correctly handle this is painful, and we leave // it as an exercise for the reader ;-). switch (n = this->cli_stream_.recv ((void *) &len, sizeof len)) { case -1: ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("(%P|%t) %p at host %C\n"), ACE_TEXT ("client logger"), this->host_name_), -1); /* NOTREACHED */ case 0: ACE_ERROR_RETURN ((LM_ERROR, "(%P|%t) closing log daemon at host %s (fd = %d)\n", this->host_name_, this->get_handle ()), -1); /* NOTREACHED */ case sizeof (size_t): { ACE_Log_Record lp; len = ntohl (len); n = this->cli_stream_.recv_n ((void *) &lp, len); if (n != (ssize_t) len) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("(%P|%t) %p at host %C\n"), ACE_TEXT ("client logger"), this->host_name_), -1); /* NOTREACHED */ lp.decode (); if (lp.length () == n) { ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%P|%t) "))); lp.print (ACE_TEXT_CHAR_TO_TCHAR (this->host_name_), 1); } else ACE_ERROR ((LM_ERROR, ACE_TEXT ("(%P|%t) error, lp.length = %d, n = %d\n"), lp.length (), n)); break; } default: ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("(%P|%t) %p at host %C\n"), ACE_TEXT ("client logger"), this->host_name_), -1); /* NOTREACHED */ } return 0;}// Extract underlying device descriptor.ACE_HANDLELogging_Handler::get_handle (void) const{ return this->cli_stream_.get_handle ();}intLogging_Handler::open (void){ ACE_INET_Addr addr; if (this->cli_stream_.get_remote_addr (addr) == -1) return -1; else { ACE_OS::strncpy (this->host_name_, addr.get_host_name (), MAXHOSTNAMELEN + 1); if (REACTOR::instance ()->register_handler (this, READ_MASK) == -1) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("(%P|%t) can't register with reactor\n")), -1); else if (REACTOR::instance ()->schedule_timer (this, (const void *) this, ACE_Time_Value (2), ACE_Time_Value (2)) == -1) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("(%P|%t) can't register with reactor\n")), -1); else ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%P|%t) connected with %C\n"), this->host_name_)); return 0; }}// Perform termination activities when deregistered from the// ACE_Reactor.intLogging_Handler::handle_close (ACE_HANDLE, ACE_Reactor_Mask){ // Must have been allocated dynamically delete this; return 0;}// Perform termination activities when close fails.intLogging_Handler::close (void){ return this->handle_close ();}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?