# ACE_Cached_Connect_Strategy_Ex< SVC_HANDLER,, CACHING_STRATEGY, ATTRIBUTES, MUTEX > Class Template Reference

A connection strategy which caches connections to peers (represented by <svc_handler> instances), thereby allowing subsequent re-use of unused, but available, connections. More...

`#include <Cached_Connect_Strategy_T.h>`

Inheritance diagram for ACE_Cached_Connect_Strategy_Ex< SVC_HANDLER,, CACHING_STRATEGY, ATTRIBUTES, MUTEX >:

[legend]
Collaboration diagram for ACE_Cached_Connect_Strategy_Ex< SVC_HANDLER,, CACHING_STRATEGY, ATTRIBUTES, MUTEX >:

[legend]
List of all members.

## Public Types

typedef ACE_Refcounted_Hash_Recyclable< ACE_PEER_CONNECTOR_ADDR > | REFCOUNTED_HASH_RECYCLABLE_ADDRESS
typedef ACE_Hash_Cache_Map_Manager< REFCOUNTED_HASH_RECYCLABLE_ADDRESS, SVC_HANDLER *, ACE_Hash< REFCOUNTED_HASH_RECYCLABLE_ADDRESS >, ACE_Equal_To< REFCOUNTED_HASH_RECYCLABLE_ADDRESS >, CACHING_STRATEGY, ATTRIBUTES > | CONNECTION_CACHE
typedef ACE_TYPENAME CONNECTION_CACHE::CACHE_ENTRY | CONNECTION_CACHE_ENTRY
typedef ACE_TYPENAME CONNECTION_CACHE::key_type | KEY
typedef ACE_TYPENAME CONNECTION_CACHE::mapped_type | VALUE
typedef ACE_Recyclable_Handler_Cleanup_Strategy< REFCOUNTED_HASH_RECYCLABLE_ADDRESS, ACE_Pair< SVC_HANDLER *, ATTRIBUTES >, ACE_Hash_Map_Manager_Ex< REFCOUNTED_HASH_RECYCLABLE_ADDRESS, ACE_Pair< SVC_HANDLER *, ATTRIBUTES >, ACE_Hash< REFCOUNTED_HASH_RECYCLABLE_ADDRESS >, ACE_Equal_To< REFCOUNTED_HASH_RECYCLABLE_ADDRESS >, MUTEX > > | CLEANUP_STRATEGY
typedef ACE_Cached_Connect_Strategy< SVC_HANDLER, ACE_PEER_CONNECTOR_2, MUTEX > | CCSBASE

## Public Member Functions

| ACE_Cached_Connect_Strategy_Ex (CACHING_STRATEGY &caching_s, ACE_Creation_Strategy< SVC_HANDLER > *cre_s=0, ACE_Concurrency_Strategy< SVC_HANDLER > *con_s=0, ACE_Recycling_Strategy< SVC_HANDLER > *rec_s=0, MUTEX *lock=0, int delete_lock=0)
| Constructor.
virtual | ~ACE_Cached_Connect_Strategy_Ex (void)
| Destructor.
virtual int | purge_connections (void)
| Explicit purging of connection entries from the connection cache.
virtual int | mark_as_closed_i (const void *recycling_act)
void | cleanup (void)
CACHING_STRATEGY & | caching_strategy (void)

## Protected Member Functions

int | find (ACE_Refcounted_Hash_Recyclable< ACE_PEER_CONNECTOR_ADDR > &search_addr, ACE_Hash_Map_Entry< ACE_Refcounted_Hash_Recyclable< ACE_PEER_CONNECTOR_ADDR >, ACE_Pair< SVC_HANDLER *, ATTRIBUTES > > *&entry)
| Find an idle handle.
virtual int | purge_i (const void *recycling_act)
| Remove from cache (non-locking version).
virtual int | cache_i (const void *recycling_act)
| Add to cache (non-locking version).
virtual int | recycle_state_i (const void *recycling_act, ACE_Recyclable_State new_state)
| Get/Set <recycle_state> (non-locking version).
virtual ACE_Recyclable_State | recycle_state_i (const void *recycling_act) const
| Get <recycle_state> (non-locking version).
virtual int | cleanup_hint_i (const void *recycling_act, void **act_holder)
| Cleanup hint and reset <*act_holder> to zero if <act_holder != 0>.
int | check_hint_i (SVC_HANDLER *&sh, const ACE_PEER_CONNECTOR_ADDR &remote_addr, ACE_Time_Value *timeout, const ACE_PEER_CONNECTOR_ADDR &local_addr, int reuse_addr, int flags, int perms, ACE_Hash_Map_Entry< ACE_Refcounted_Hash_Recyclable< ACE_PEER_CONNECTOR_ADDR >, ACE_Pair< SVC_HANDLER *, ATTRIBUTES > > *&entry, int &found)
virtual int | find_or_create_svc_handler_i (SVC_HANDLER *&sh, const ACE_PEER_CONNECTOR_ADDR &remote_addr, ACE_Time_Value *timeout, const ACE_PEER_CONNECTOR_ADDR &local_addr, int reuse_addr, int flags, int perms, ACE_Hash_Map_Entry< ACE_Refcounted_Hash_Recyclable< ACE_PEER_CONNECTOR_ADDR >, ACE_Pair< SVC_HANDLER *, ATTRIBUTES > > *&entry, int &found)
virtual int | connect_svc_handler_i (SVC_HANDLER *&sh, const ACE_PEER_CONNECTOR_ADDR &remote_addr, ACE_Time_Value *timeout, const ACE_PEER_CONNECTOR_ADDR &local_addr, int reuse_addr, int flags, int perms, int &found)
virtual int | cached_connect (SVC_HANDLER *&sh, const ACE_PEER_CONNECTOR_ADDR &remote_addr, ACE_Time_Value *timeout, const ACE_PEER_CONNECTOR_ADDR &local_addr, int reuse_addr, int flags, int perms)

## Protected Attributes

CONNECTION_CACHE | connection_cache_
| Table that maintains the cache of connected <svc_handler>s.

## Detailed Description

### template<class SVC_HANDLER, ACE_PEER_CONNECTOR_1, class CACHING_STRATEGY, class ATTRIBUTES, class MUTEX>
class ACE_Cached_Connect_Strategy_Ex< SVC_HANDLER,, CACHING_STRATEGY, ATTRIBUTES, MUTEX >

A connection strategy which caches connections to peers (represented by <svc_handler> instances), thereby allowing subsequent re-use of unused, but available, connections.

<cached_connect_strategy> is intended to be used as a plug-in connection strategy for <ace_strategy_connector>. It's added value is re-use of established connections and tweaking the role of the cache as per the caching strategy.

## Member Typedef Documentation

template<class SVC_HANDLER, ACE_PEER_CONNECTOR_1 , class CACHING_STRATEGY, class ATTRIBUTES, class MUTEX>
typedef ACE_Cached_Connect_Strategy<SVC_HANDLER, ACE_PEER_CONNECTOR_2, MUTEX> ACE_Cached_Connect_Strategy_Ex< SVC_HANDLER,, CACHING_STRATEGY, ATTRIBUTES, MUTEX >::CCSBASE

template<class SVC_HANDLER, ACE_PEER_CONNECTOR_1 , class CACHING_STRATEGY, class ATTRIBUTES, class MUTEX>

typedef ACE_Recyclable_Handler_Cleanup_Strategy<REFCOUNTED_HASH_RECYCLABLE_ADDRESS, ACE_Pair<SVC_HANDLER *, ATTRIBUTES>, ACE_Hash_Map_Manager_Ex<REFCOUNTED_HASH_RECYCLABLE_ADDRESS, ACE_Pair<SVC_HANDLER *, ATTRIBUTES>, ACE_Hash<REFCOUNTED_HASH_RECYCLABLE_ADDRESS>, ACE_Equal_To<REFCOUNTED_HASH_RECYCLABLE_ADDRESS>, MUTEX> > ACE_Cached_Connect_Strategy_Ex< SVC_HANDLER,, CACHING_STRATEGY, ATTRIBUTES, MUTEX >::CLEANUP_STRATEGY

template<class SVC_HANDLER, ACE_PEER_CONNECTOR_1 , class CACHING_STRATEGY, class ATTRIBUTES, class MUTEX>
typedef ACE_Hash_Cache_Map_Manager<REFCOUNTED_HASH_RECYCLABLE_ADDRESS, SVC_HANDLER *, ACE_Hash<REFCOUNTED_HASH_RECYCLABLE_ADDRESS>, ACE_Equal_To<REFCOUNTED_HASH_RECYCLABLE_ADDRESS>, CACHING_STRATEGY, ATTRIBUTES> ACE_Cached_Connect_Strategy_Ex< SVC_HANDLER,, CACHING_STRATEGY, ATTRIBUTES, MUTEX >::CONNECTION_CACHE

template<class SVC_HANDLER, ACE_PEER_CONNECTOR_1 , class CACHING_STRATEGY, class ATTRIBUTES, class MUTEX>
typedef ACE_TYPENAME CONNECTION_CACHE::CACHE_ENTRY ACE_Cached_Connect_Strategy_Ex< SVC_HANDLER,, CACHING_STRATEGY, ATTRIBUTES, MUTEX >::CONNECTION_CACHE_ENTRY

template<class SVC_HANDLER, ACE_PEER_CONNECTOR_1 , class CACHING_STRATEGY, class ATTRIBUTES, class MUTEX>
typedef ACE_TYPENAME CONNECTION_CACHE::key_type ACE_Cached_Connect_Strategy_Ex< SVC_HANDLER,, CACHING_STRATEGY, ATTRIBUTES, MUTEX >::KEY

template<class SVC_HANDLER, ACE_PEER_CONNECTOR_1 , class CACHING_STRATEGY, class ATTRIBUTES, class MUTEX>
typedef ACE_Refcounted_Hash_Recyclable<ACE_PEER_CONNECTOR_ADDR> ACE_Cached_Connect_Strategy_Ex< SVC_HANDLER,, CACHING_STRATEGY, ATTRIBUTES, MUTEX >::REFCOUNTED_HASH_RECYCLABLE_ADDRESS

| Reimplemented from ACE_Cached_Connect_Strategy< SVC_HANDLER, ACE_PEER_CONNECTOR_2, MUTEX >. Reimplemented in ACE_Bounded_Cached_Connect_Strategy< SVC_HANDLER,, CACHING_STRATEGY, ATTRIBUTES, MUTEX >.

template<class SVC_HANDLER, ACE_PEER_CONNECTOR_1 , class CACHING_STRATEGY, class ATTRIBUTES, class MUTEX>
typedef ACE_TYPENAME CONNECTION_CACHE::mapped_type ACE_Cached_Connect_Strategy_Ex< SVC_HANDLER,, CACHING_STRATEGY, ATTRIBUTES, MUTEX >::VALUE

## Constructor & Destructor Documentation

template<class SVC_HANDLER, class _ACE_PEER_CONNECTOR, class CACHING_STRATEGY, class ATTRIBUTES, class MUTEX>
ACE_BEGIN_VERSIONED_NAMESPACE_DECL ACE_Cached_Connect_Strategy_Ex< SVC_HANDLER, _ACE_PEER_CONNECTOR, CACHING_STRATEGY, ATTRIBUTES, MUTEX >::ACE_Cached_Connect_Strategy_Ex | ( | CACHING_STRATEGY & | caching_s,
|  | ACE_Creation_Strategy< SVC_HANDLER > * | cre_s = `0`,
|  | ACE_Concurrency_Strategy< SVC_HANDLER > * | con_s = `0`,
|  | ACE_Recycling_Strategy< SVC_HANDLER > * | rec_s = `0`,
|  | MUTEX * | lock = `0`,
|  | int | delete_lock = `0`
| ) |

| Constructor.

template<class SVC_HANDLER, class _ACE_PEER_CONNECTOR, class CACHING_STRATEGY, class ATTRIBUTES, class MUTEX>
ACE_Cached_Connect_Strategy_Ex< SVC_HANDLER, _ACE_PEER_CONNECTOR, CACHING_STRATEGY, ATTRIBUTES, MUTEX >::~ACE_Cached_Connect_Strategy_Ex | ( | void |  | ) | `[virtual]`

| Destructor.

## Member Function Documentation

template<class SVC_HANDLER, class _ACE_PEER_CONNECTOR, class CACHING_STRATEGY, class ATTRIBUTES, class MUTEX>
int ACE_Cached_Connect_Strategy_Ex< SVC_HANDLER, _ACE_PEER_CONNECTOR, CACHING_STRATEGY, ATTRIBUTES, MUTEX >::cache_i | ( | const void * | recycling_act | ) | `[protected, virtual]`

| Add to cache (non-locking version). Reimplemented from ACE_Cached_Connect_Strategy< SVC_HANDLER, ACE_PEER_CONNECTOR_2, MUTEX >.

template<class SVC_HANDLER, class _ACE_PEER_CONNECTOR, class CACHING_STRATEGY, class ATTRIBUTES, class MUTEX>
int ACE_Cached_Connect_Strategy_Ex< SVC_HANDLER, _ACE_PEER_CONNECTOR, CACHING_STRATEGY, ATTRIBUTES, MUTEX >::cached_connect | ( | SVC_HANDLER *& | sh,
|  | const ACE_PEER_CONNECTOR_ADDR & | remote_addr,
|  | ACE_Time_Value * | timeout,
|  | const ACE_PEER_CONNECTOR_ADDR & | local_addr,
|  | int | reuse_addr,
|  | int | flags,
|  | int | perms
| ) | `[protected, virtual]`

| Connection of the svc_handler with the remote host. This method also encapsulates the connection done with auto_purging under the hood. If the connect failed due to the process running out of file descriptors then, auto_purging of some connections are done from the CONNECTION_CACHE. This frees the descriptors which get used in the connect process and hence the connect operation can succeed.

template<class SVC_HANDLER, class _ACE_PEER_CONNECTOR, class CACHING_STRATEGY, class ATTRIBUTES, class MUTEX>
CACHING_STRATEGY & ACE_Cached_Connect_Strategy_Ex< SVC_HANDLER, _ACE_PEER_CONNECTOR, CACHING_STRATEGY, ATTRIBUTES, MUTEX >::caching_strategy | ( | void |  | ) |

template<class SVC_HANDLER, class _ACE_PEER_CONNECTOR, class CACHING_STRATEGY, class ATTRIBUTES, class MUTEX>
int ACE_Cached_Connect_Strategy_Ex< SVC_HANDLER, _ACE_PEER_CONNECTOR, CACHING_STRATEGY, ATTRIBUTES, MUTEX >::check_hint_i | ( | SVC_HANDLER *& | sh,
|  | const ACE_PEER_CONNECTOR_ADDR & | remote_addr,
|  | ACE_Time_Value * | timeout,
|  | const ACE_PEER_CONNECTOR_ADDR & | local_addr,
|  | int | reuse_addr,
|  | int | flags,
|  | int | perms,
|  | ACE_Hash_Map_Entry< ACE_Refcounted_Hash_Recyclable< ACE_PEER_CONNECTOR_ADDR >, ACE_Pair< SVC_HANDLER *, ATTRIBUTES > > *& | entry,
|  | int & | found
| ) | `[protected]`

template<class SVC_HANDLER, class _ACE_PEER_CONNECTOR, class CACHING_STRATEGY, class ATTRIBUTES, class MUTEX>
void ACE_Cached_Connect_Strategy_Ex< SVC_HANDLER, _ACE_PEER_CONNECTOR, CACHING_STRATEGY, ATTRIBUTES, MUTEX >::cleanup | ( | void |  | ) |

| Since g++ version < 2.8 arent happy with templates, this special method had to be devised to avoid memory leaks and perform cleanup of the <connection_cache_>.

template<class SVC_HANDLER, class _ACE_PEER_CONNECTOR, class CACHING_STRATEGY, class ATTRIBUTES, class MUTEX>
int ACE_Cached_Connect_Strategy_Ex< SVC_HANDLER, _ACE_PEER_CONNECTOR, CACHING_STRATEGY, ATTRIBUTES, MUTEX >::cleanup_hint_i | ( | const void * | recycling_act,
|  | void ** | act_holder
| ) | `[protected, virtual]`

| Cleanup hint and reset <*act_holder> to zero if <act_holder != 0>. Reimplemented from ACE_Cached_Connect_Strategy< SVC_HANDLER, ACE_PEER_CONNECTOR_2, MUTEX >.

template<class SVC_HANDLER, class _ACE_PEER_CONNECTOR, class CACHING_STRATEGY, class ATTRIBUTES, class MUTEX>
int ACE_Cached_Connect_Strategy_Ex< SVC_HANDLER, _ACE_PEER_CONNECTOR, CACHING_STRATEGY, ATTRIBUTES, MUTEX >::connect_svc_handler_i | ( | SVC_HANDLER *& | sh,
|  | const ACE_PEER_CONNECTOR_ADDR & | remote_addr,
|  | ACE_Time_Value * | timeout,
|  | const ACE_PEER_CONNECTOR_ADDR & | local_addr,
|  | int | reuse_addr,
|  | int | flags,
|  | int | perms,
|  | int & | found
| ) | `[protected, virtual]`

| Reimplemented from ACE_Cached_Connect_Strategy< SVC_HANDLER, ACE_PEER_CONNECTOR_2, MUTEX >.

template<class SVC_HANDLER, class _ACE_PEER_CONNECTOR, class CACHING_STRATEGY, class ATTRIBUTES, class MUTEX>
int ACE_Cached_Connect_Strategy_Ex< SVC_HANDLER, _ACE_PEER_CONNECTOR, CACHING_STRATEGY, ATTRIBUTES, MUTEX >::find | ( | ACE_Refcounted_Hash_Recyclable< ACE_PEER_CONNECTOR_ADDR > & | search_addr,
|  | ACE_Hash_Map_Entry< ACE_Refcounted_Hash_Recyclable< ACE_PEER_CONNECTOR_ADDR >, ACE_Pair< SVC_HANDLER *, ATTRIBUTES > > *& | entry
| ) | `[protected]`

| Find an idle handle.

template<class SVC_HANDLER, class _ACE_PEER_CONNECTOR, class CACHING_STRATEGY, class ATTRIBUTES, class MUTEX>
int ACE_Cached_Connect_Strategy_Ex< SVC_HANDLER, _ACE_PEER_CONNECTOR, CACHING_STRATEGY, ATTRIBUTES, MUTEX >::find_or_create_svc_handler_i | ( | SVC_HANDLER *& | sh,
|  | const ACE_PEER_CONNECTOR_ADDR & | remote_addr,
|  | ACE_Time_Value * | timeout,
|  | const ACE_PEER_CONNECTOR_ADDR & | local_addr,
|  | int | reuse_addr,
|  | int | flags,
|  | int | perms,
|  | ACE_Hash_Map_Entry< ACE_Refcounted_Hash_Recyclable< ACE_PEER_CONNECTOR_ADDR >, ACE_Pair< SVC_HANDLER *, ATTRIBUTES > > *& | entry,
|  | int & | found
| ) | `[protected, virtual]`

| Reimplemented in ACE_Bounded_Cached_Connect_Strategy< SVC_HANDLER,, CACHING_STRATEGY, ATTRIBUTES, MUTEX >.

template<class SVC_HANDLER, class _ACE_PEER_CONNECTOR, class CACHING_STRATEGY, class ATTRIBUTES, class MUTEX>
int ACE_Cached_Connect_Strategy_Ex< SVC_HANDLER, _ACE_PEER_CONNECTOR, CACHING_STRATEGY, ATTRIBUTES, MUTEX >::mark_as_closed_i | ( | const void * | recycling_act | ) | `[virtual]`

| Mark as closed (non-locking version). This is used during the cleanup of the connections purged. Reimplemented from ACE_Cached_Connect_Strategy< SVC_HANDLER, ACE_PEER_CONNECTOR_2, MUTEX >.

template<class SVC_HANDLER, class _ACE_PEER_CONNECTOR, class CACHING_STRATEGY, class ATTRIBUTES, class MUTEX>
int ACE_Cached_Connect_Strategy_Ex< SVC_HANDLER, _ACE_PEER_CONNECTOR, CACHING_STRATEGY, ATTRIBUTES, MUTEX >::purge_connections | ( | void |  | ) | `[virtual]`

| Explicit purging of connection entries from the connection cache.

template<class SVC_HANDLER, class _ACE_PEER_CONNECTOR, class CACHING_STRATEGY, class ATTRIBUTES, class MUTEX>
int ACE_Cached_Connect_Strategy_Ex< SVC_HANDLER, _ACE_PEER_CONNECTOR, CACHING_STRATEGY, ATTRIBUTES, MUTEX >::purge_i | ( | const void * | recycling_act | ) | `[protected, virtual]`

| Remove from cache (non-locking version). Reimplemented from ACE_Cached_Connect_Strategy< SVC_HANDLER, ACE_PEER_CONNECTOR_2, MUTEX >.

template<class SVC_HANDLER, class _ACE_PEER_CONNECTOR, class CACHING_STRATEGY, class ATTRIBUTES, class MUTEX>
ACE_Recyclable_State ACE_Cached_Connect_Strategy_Ex< SVC_HANDLER, _ACE_PEER_CONNECTOR, CACHING_STRATEGY, ATTRIBUTES, MUTEX >::recycle_state_i | ( | const void * | recycling_act | ) | const`[protected, virtual]`

| Get <recycle_state> (non-locking version). Reimplemented from ACE_Cached_Connect_Strategy< SVC_HANDLER, ACE_PEER_CONNECTOR_2, MUTEX >.

template<class SVC_HANDLER, class _ACE_PEER_CONNECTOR, class CACHING_STRATEGY, class ATTRIBUTES, class MUTEX>
int ACE_Cached_Connect_Strategy_Ex< SVC_HANDLER, _ACE_PEER_CONNECTOR, CACHING_STRATEGY, ATTRIBUTES, MUTEX >::recycle_state_i | ( | const void * | recycling_act,
|  | ACE_Recyclable_State | new_state
| ) | `[protected, virtual]`

| Get/Set <recycle_state> (non-locking version). Reimplemented from ACE_Cached_Connect_Strategy< SVC_HANDLER, ACE_PEER_CONNECTOR_2, MUTEX >.

## Member Data Documentation

template<class SVC_HANDLER, ACE_PEER_CONNECTOR_1 , class CACHING_STRATEGY, class ATTRIBUTES, class MUTEX>
CONNECTION_CACHE ACE_Cached_Connect_Strategy_Ex< SVC_HANDLER,, CACHING_STRATEGY, ATTRIBUTES, MUTEX >::connection_cache_ `[protected]`

| Table that maintains the cache of connected <svc_handler>s.

The documentation for this class was generated from the following files:

- Cached_Connect_Strategy_T.h
- Cached_Connect_Strategy_T.cpp