#include <ace/Acceptor.h>
template<class SVC_HANDLER, ACE_PEER_ACCEPTOR_1> class ACE_Strategy_Acceptor : public ACE_Acceptor <SVC_HANDLER, ACE_PEER_ACCEPTOR_2> {
public:
ACE_Strategy_Acceptor ( const char service_name[] = 0, const char service_description[] = 0 );
ACE_Strategy_Acceptor ( const ACE_PEER_ACCEPTOR_ADDR &local_addr, ACE_Reactor * = ACE_Reactor::instance (), ACE_Creation_Strategy<SVC_HANDLER> * = 0, ACE_Accept_Strategy<SVC_HANDLER, ACE_PEER_ACCEPTOR_2> * = 0, ACE_Concurrency_Strategy<SVC_HANDLER> * = 0, ACE_Scheduling_Strategy<SVC_HANDLER> * = 0, const char service_name[] = 0, const char service_description[] = 0 );
int open ( const ACE_PEER_ACCEPTOR_ADDR &, ACE_Reactor * = ACE_Reactor::instance (), ACE_Creation_Strategy<SVC_HANDLER> * = 0, ACE_Accept_Strategy<SVC_HANDLER, ACE_PEER_ACCEPTOR_2> * = 0, ACE_Concurrency_Strategy<SVC_HANDLER> * = 0, ACE_Scheduling_Strategy<SVC_HANDLER> * = 0, const char service_name[] = 0, const char service_description[] = 0 );
virtual ~ACE_Strategy_Acceptor (void);
virtual operator ACE_PEER_ACCEPTOR &() const;
virtual ACE_PEER_ACCEPTOR &acceptor (void) const;
virtual ACE_HANDLE get_handle (void) const;
void dump (void) const;
ACE_ALLOC_HOOK_DECLARE;
protected:
virtual int suspend (void);
virtual int resume (void);
virtual int fini (void);
virtual int info (char **buf, size_t) const;
virtual int make_svc_handler (SVC_HANDLER *&);
virtual int accept_svc_handler (SVC_HANDLER *svc_handler);
virtual int activate_svc_handler (SVC_HANDLER *svc_handler);
virtual int handle_close ( ACE_HANDLE = ACE_INVALID_HANDLE, ACE_Reactor_Mask = ACE_Event_Handler::ALL_EVENTS_MASK );
virtual int handle_signal (int signum, siginfo_t *, ucontext_t *);
typedef ACE_Creation_Strategy<SVC_HANDLER> CREATION_STRATEGY;
typedef ACE_Accept_Strategy<SVC_HANDLER, ACE_PEER_ACCEPTOR_2> ACCEPT_STRATEGY; typedef ACE_Concurrency_Strategy<SVC_HANDLER> CONCURRENCY_STRATEGY;typedef ACE_Scheduling_Strategy<SVC_HANDLER> SCHEDULING_STRATEGY;
CREATION_STRATEGY *creation_strategy_;
int delete_creation_strategy_;
ACCEPT_STRATEGY *accept_strategy_;
int delete_accept_strategy_;
CONCURRENCY_STRATEGY *concurrency_strategy_;
int delete_concurrency_strategy_;
SCHEDULING_STRATEGY *scheduling_strategy_;
int delete_scheduling_strategy_;
char *service_name_;
char *service_description_;
u_short service_port_;
ACE_PEER_ACCEPTOR_ADDR service_addr_;
};
ACE_Strategy_Acceptor (
const char service_name[] = 0,
const char service_description[] = 0
);
ACE_Strategy_Acceptor (
const ACE_PEER_ACCEPTOR_ADDR &local_addr,
ACE_Reactor * = ACE_Reactor::instance (),
ACE_Creation_Strategy<SVC_HANDLER> * = 0,
ACE_Accept_Strategy<SVC_HANDLER, ACE_PEER_ACCEPTOR_2> * = 0,
ACE_Concurrency_Strategy<SVC_HANDLER> * = 0,
ACE_Scheduling_Strategy<SVC_HANDLER> * = 0,
const char service_name[] = 0,
const char service_description[] = 0
);
this
with the Reactor and listen for connection requests at the
designated local_addr
.
int open (
const ACE_PEER_ACCEPTOR_ADDR &,
ACE_Reactor * = ACE_Reactor::instance (),
ACE_Creation_Strategy<SVC_HANDLER> * = 0,
ACE_Accept_Strategy<SVC_HANDLER, ACE_PEER_ACCEPTOR_2> * = 0,
ACE_Concurrency_Strategy<SVC_HANDLER> * = 0,
ACE_Scheduling_Strategy<SVC_HANDLER> * = 0,
const char service_name[] = 0,
const char service_description[] = 0
);
this
with the Reactor and listen for connection requests at the
designated local_addr
.
virtual ~ACE_Strategy_Acceptor (void);
virtual operator ACE_PEER_ACCEPTOR &() const;
virtual ACE_PEER_ACCEPTOR &acceptor (void) const;
virtual ACE_HANDLE get_handle (void) const;
ACE_HANDLE
.
void dump (void) const;
ACE_ALLOC_HOOK_DECLARE;
virtual int suspend (void);
Scheduling_Strategy
's suspend
method.
virtual int resume (void);
Scheduling_Strategy
's resume
method.
virtual int fini (void);
handle_close
when dynamically unlinked.
virtual int info (char **buf, size_t) const;
buf
.
= The following three methods define the Acceptor
's strategies
for creating, accepting, and activating SVC_HANDLER
's,
respectively.
virtual int make_svc_handler (SVC_HANDLER *&);
SVC_HANDLER
. The strategy for
creating a SVC_HANDLER
are configured into the Acceptor via
it's creation_strategy_
. The default is to create a new
SVC_HANDLER
if sh
== 0, else sh
is unchanged. However,
subclasses can override this policy to perform SVC_HANDLER
creation in any way that they like (such as creating subclass
instances of SVC_HANDLER
, using a singleton, dynamically
linking the handler, etc.). Returns -1 on failure, else 0.
virtual int accept_svc_handler (SVC_HANDLER *svc_handler);
SVC_HANDLER
. The default behavior delegates to the
PEER_ACCEPTOR::accept
in the Acceptor_Strategy
.
virtual int activate_svc_handler (SVC_HANDLER *svc_handler);
SVC_HANDLER
with the appropriate
concurrency strategy. The default behavior of this method is to
activate the SVC_HANDLER
by calling its open
method (which
allows the SVC_HANDLER
to define its own concurrency strategy).
However, subclasses can override this strategy to do more
sophisticated concurrency activations (such as creating the
SVC_HANDLER
as an "active object" via multi-threading or
multi-processing).
virtual int handle_close (
ACE_HANDLE = ACE_INVALID_HANDLE,
ACE_Reactor_Mask = ACE_Event_Handler::ALL_EVENTS_MASK
);
this
is removed from the
Reactor
.
virtual int handle_signal (int signum, siginfo_t *, ucontext_t *);
typedef ACE_Creation_Strategy<SVC_HANDLER> CREATION_STRATEGY;
typedef ACE_Accept_Strategy<SVC_HANDLER, ACE_PEER_ACCEPTOR_2> ACCEPT_STRATEGY;
typedef ACE_Concurrency_Strategy<SVC_HANDLER> CONCURRENCY_STRATEGY;
typedef ACE_Scheduling_Strategy<SVC_HANDLER> SCHEDULING_STRATEGY;
CREATION_STRATEGY *creation_strategy_;
int delete_creation_strategy_;
Acceptor
created the creation strategy and thus should
delete it, else 0.
ACCEPT_STRATEGY *accept_strategy_;
Acceptor
.
int delete_accept_strategy_;
Acceptor
created the accept strategy and thus should delete
it, else 0.
CONCURRENCY_STRATEGY *concurrency_strategy_;
Acceptor
.
int delete_concurrency_strategy_;
Acceptor
created the concurrency strategy and thus should
delete it, else 0.
SCHEDULING_STRATEGY *scheduling_strategy_;
Acceptor
.
int delete_scheduling_strategy_;
Acceptor
created the scheduling strategy and thus should
delete it, else 0.
char *service_name_;
char *service_description_;
u_short service_port_;
ACE_PEER_ACCEPTOR_ADDR service_addr_;
Strategy_Acceptor
uses to listen for
connections.