#include <ace/Svc_Handler.h>
template<ACE_PEER_STREAM_1, ACE_SYNCH_DECL> class ACE_Svc_Handler : public ACE_Task<ACE_SYNCH_USE> {
public:
ACE_Svc_Handler ( ACE_Thread_Manager *thr_mgr = 0, ACE_Message_Queue<ACE_SYNCH_USE> *mq = 0, ACE_Reactor *reactor = ACE_Reactor::instance () );
virtual ~ACE_Svc_Handler (void);
virtual int open (void * = 0);
virtual int close (u_long flags = 0);
virtual int idle (u_long flags = 0);
virtual ACE_Recyclable_State recycle_state (void) const;
virtual int recycle_state (ACE_Recyclable_State new_state);
virtual void cleanup_hint (void);
virtual int init (int argc, ASYS_TCHAR *argv[]);
virtual int fini (void);
virtual int info (ASYS_TCHAR **info_string, size_t length) const;
virtual int handle_close ( ACE_HANDLE = ACE_INVALID_HANDLE, ACE_Reactor_Mask = ACE_Event_Handler::ALL_EVENTS_MASK );
virtual int handle_timeout ( const ACE_Time_Value &time, const void * );
virtual ACE_HANDLE get_handle (void) const;
virtual void set_handle (ACE_HANDLE);
ACE_PEER_STREAM &peer (void) const;
void *operator new (size_t n);
virtual void destroy (void);
void operator delete (void *);
void shutdown (void);
void dump (void) const;
virtual void recycler ( ACE_Connection_Recycling_Strategy *recycler, const void *recycling_act );
virtual ACE_Connection_Recycling_Strategy *recycler (void) const;
virtual const void *recycling_act (void) const;
virtual int recycle (void * = 0);
protected:
ACE_PEER_STREAM peer_;
int dynamic_;
char closing_;
ACE_Connection_Recycling_Strategy *recycler_;
const void *recycling_act_;
};
ACE_Svc_Handler (
ACE_Thread_Manager *thr_mgr = 0,
ACE_Message_Queue<ACE_SYNCH_USE> *mq = 0,
ACE_Reactor *reactor = ACE_Reactor::instance ()
);
thr_mgr
and mq
by passing them
down to the ACE_Task
base class. The reactor
is passed to
the ACE_Event_Handler
.
virtual ~ACE_Svc_Handler (void);
virtual int open (void * = 0);
ACE_Acceptor
or ACE_Connector
.
virtual int close (u_long flags = 0);
virtual int idle (u_long flags = 0);
Svc_Handler
instead of closing it. If the object does not have a recycler,
it will be closed.
virtual ACE_Recyclable_State recycle_state (void) const;
virtual int recycle_state (ACE_Recyclable_State new_state);
Svc_Handler
. If the object does not have a recycler, this call
will have no effect (and the accessor will return
ACE_RECYCLABLE_UNKNOWN).
virtual void cleanup_hint (void);
virtual int init (int argc, ASYS_TCHAR *argv[]);
virtual int fini (void);
virtual int info (ASYS_TCHAR **info_string, size_t length) const;
virtual int handle_close (
ACE_HANDLE = ACE_INVALID_HANDLE,
ACE_Reactor_Mask = ACE_Event_Handler::ALL_EVENTS_MASK
);
peer_
(to avoid descriptor leaks)
and to destroy
this object (to avoid memory leaks)! If you
don't want this behavior make sure you override this method...
virtual int handle_timeout (const ACE_Time_Value &time, const void *);
Svc_Handler
by calling handle_close
.
virtual ACE_HANDLE get_handle (void) const;
peer_
.
virtual void set_handle (ACE_HANDLE);
peer_
.
ACE_PEER_STREAM &peer (void) const;
ACE_Acceptor::accept
and ACE_Connector::connect
factories
void *operator new (size_t n);
Svc_Handler
is allocated dynamically.
virtual void destroy (void);
Svc_Handlers
(otherwise you will get memory leaks). In general, you should
call this method rather than delete
since this method knows
whether or not the object was allocated dynamically, and can act
accordingly (i.e., deleting it if it was allocated dynamically).
void operator delete (void *);
destroy
. Unfortunately, the C++ standard doesn't allow there
to be a public new and a private delete. It is a bad idea to
call this method directly, so use destroy
instead, unless you
know for sure that you've allocated the object dynamically.
void shutdown (void);
void dump (void) const;
virtual void recycler (
ACE_Connection_Recycling_Strategy *recycler,
const void *recycling_act
);
recycling_act
that is used during
purging and caching.
virtual ACE_Connection_Recycling_Strategy *recycler (void) const;
virtual const void *recycling_act (void) const;
virtual int recycle (void * = 0);