00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef ACE_STRATEGIES_T_H
00014 #define ACE_STRATEGIES_T_H
00015
00016 #include "ace/pre.h"
00017
00018 #include "ace/Hash_Map_Manager_T.h"
00019
00020 #if !defined (ACE_LACKS_PRAGMA_ONCE)
00021 # pragma once
00022 #endif
00023
00024 #include "ace/Reactor.h"
00025 #include "ace/Thread_Manager.h"
00026 #include "ace/Connection_Recycling_Strategy.h"
00027 #include "ace/Refcountable.h"
00028 #include "ace/Hashable.h"
00029 #include "ace/Recyclable.h"
00030 #include "ace/Reverse_Lock_T.h"
00031
00032
00033 #define ACE_Refcounted_Hash_Recyclable ARHR
00034
00035 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00036
00037 class ACE_Service_Repository;
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048 template<class SVC_HANDLER>
00049 class ACE_Recycling_Strategy
00050 {
00051 public:
00052
00053
00054 typedef typename SVC_HANDLER::addr_type addr_type;
00055 typedef SVC_HANDLER handler_type;
00056 typedef typename SVC_HANDLER::stream_type stream_type;
00057
00058
00059 virtual ~ACE_Recycling_Strategy (void);
00060
00061
00062
00063 virtual int assign_recycler (SVC_HANDLER *svc_handler,
00064 ACE_Connection_Recycling_Strategy *recycler,
00065 const void *recycling_act);
00066
00067
00068 virtual int prepare_for_recycling (SVC_HANDLER *svc_handler);
00069 };
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083 template <class SVC_HANDLER>
00084 class ACE_Creation_Strategy
00085 {
00086 public:
00087
00088
00089 typedef typename SVC_HANDLER::addr_type addr_type;
00090 typedef SVC_HANDLER handler_type;
00091 typedef typename SVC_HANDLER::stream_type stream_type;
00092
00093
00094
00095
00096 ACE_Creation_Strategy (ACE_Thread_Manager * = 0,
00097 ACE_Reactor * = ACE_Reactor::instance ());
00098
00099
00100
00101 int open (ACE_Thread_Manager * = 0,
00102 ACE_Reactor * = ACE_Reactor::instance ());
00103
00104 virtual ~ACE_Creation_Strategy (void);
00105
00106
00107
00108
00109
00110
00111
00112
00113 virtual int make_svc_handler (SVC_HANDLER *&sh);
00114
00115
00116 void dump (void) const;
00117
00118
00119 ACE_ALLOC_HOOK_DECLARE;
00120
00121 protected:
00122
00123 ACE_Thread_Manager *thr_mgr_;
00124
00125
00126 ACE_Reactor *reactor_;
00127 };
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140 template <class SVC_HANDLER>
00141 class ACE_Singleton_Strategy : public ACE_Creation_Strategy<SVC_HANDLER>
00142 {
00143 public:
00144
00145
00146 typedef ACE_Creation_Strategy<SVC_HANDLER> base_type;
00147
00148
00149 ACE_Singleton_Strategy (SVC_HANDLER * = 0,
00150 ACE_Thread_Manager * = 0);
00151 int open (SVC_HANDLER *,
00152 ACE_Thread_Manager * = 0);
00153 virtual ~ACE_Singleton_Strategy (void);
00154
00155
00156
00157
00158 virtual int make_svc_handler (SVC_HANDLER *&);
00159
00160
00161 void dump (void) const;
00162
00163
00164 ACE_ALLOC_HOOK_DECLARE;
00165
00166 protected:
00167
00168 SVC_HANDLER *svc_handler_;
00169
00170
00171 bool delete_svc_handler_;
00172 };
00173
00174
00175
00176
00177
00178
00179
00180 template <class SVC_HANDLER>
00181 class ACE_DLL_Strategy : public ACE_Creation_Strategy<SVC_HANDLER>
00182 {
00183 public:
00184
00185
00186 typedef ACE_Creation_Strategy<SVC_HANDLER> base_type;
00187
00188
00189
00190
00191 ACE_DLL_Strategy (void);
00192
00193
00194
00195 ACE_DLL_Strategy (const ACE_TCHAR dll_name[],
00196 const ACE_TCHAR factory_function[],
00197 const ACE_TCHAR svc_name[],
00198 ACE_Service_Repository *,
00199 ACE_Thread_Manager * = 0);
00200
00201
00202
00203 int open (const ACE_TCHAR dll_name[],
00204 const ACE_TCHAR factory_function[],
00205 const ACE_TCHAR svc_name[],
00206 ACE_Service_Repository *,
00207 ACE_Thread_Manager * = 0);
00208
00209
00210
00211
00212 virtual int make_svc_handler (SVC_HANDLER *&);
00213
00214
00215 void dump (void) const;
00216
00217
00218 ACE_ALLOC_HOOK_DECLARE;
00219
00220 protected:
00221 typedef ACE_Creation_Strategy<SVC_HANDLER> inherited;
00222
00223
00224 ACE_TCHAR dll_name_[MAXPATHLEN + 1];
00225
00226
00227
00228 ACE_TCHAR factory_function_[MAXPATHLEN + 1];
00229
00230
00231 ACE_TCHAR svc_name_[MAXNAMELEN + 1];
00232
00233
00234 ACE_Service_Repository *svc_rep_;
00235 };
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250 template <class SVC_HANDLER>
00251 class ACE_Concurrency_Strategy
00252 {
00253 public:
00254
00255
00256 typedef typename SVC_HANDLER::addr_type addr_type;
00257 typedef SVC_HANDLER handler_type;
00258 typedef typename SVC_HANDLER::stream_type stream_type;
00259
00260
00261 ACE_Concurrency_Strategy (int flags = 0);
00262
00263
00264
00265
00266
00267
00268
00269
00270 virtual int activate_svc_handler (SVC_HANDLER *svc_handler,
00271 void *arg = 0);
00272
00273 virtual ~ACE_Concurrency_Strategy (void);
00274
00275
00276 void dump (void) const;
00277
00278
00279 ACE_ALLOC_HOOK_DECLARE;
00280
00281 protected:
00282
00283
00284
00285 int flags_;
00286 };
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298 template <class SVC_HANDLER>
00299 class ACE_Reactive_Strategy : public ACE_Concurrency_Strategy <SVC_HANDLER>
00300 {
00301 public:
00302
00303
00304 typedef ACE_Concurrency_Strategy<SVC_HANDLER> base_type;
00305
00306
00307
00308 ACE_Reactive_Strategy (int flags = 0);
00309
00310
00311 ACE_Reactive_Strategy (ACE_Reactor *reactor,
00312 ACE_Reactor_Mask = ACE_Event_Handler::READ_MASK,
00313 int flags = 0);
00314
00315
00316 virtual int open (ACE_Reactor *reactor,
00317 ACE_Reactor_Mask = ACE_Event_Handler::READ_MASK,
00318 int flags = 0);
00319
00320
00321 virtual ~ACE_Reactive_Strategy (void);
00322
00323
00324
00325
00326 virtual int activate_svc_handler (SVC_HANDLER *svc_handler,
00327 void *arg = 0);
00328
00329
00330 void dump (void) const;
00331
00332
00333 ACE_ALLOC_HOOK_DECLARE;
00334
00335 protected:
00336 typedef ACE_Concurrency_Strategy<SVC_HANDLER> inherited;
00337
00338
00339 ACE_Reactor *reactor_;
00340
00341
00342
00343 ACE_Reactor_Mask mask_;
00344 };
00345
00346
00347
00348
00349
00350
00351
00352
00353
00354
00355
00356
00357
00358 template <class SVC_HANDLER>
00359 class ACE_Thread_Strategy : public ACE_Concurrency_Strategy<SVC_HANDLER>
00360 {
00361 public:
00362
00363
00364 typedef ACE_Concurrency_Strategy<SVC_HANDLER> base_type;
00365
00366
00367
00368 ACE_Thread_Strategy (int flags = 0);
00369
00370
00371 ACE_Thread_Strategy (ACE_Thread_Manager *tm,
00372 long thr_flags,
00373 int n_threads = 1,
00374 int flags = 0);
00375
00376
00377 virtual int open (ACE_Thread_Manager *tm,
00378 long thr_flags,
00379 int n_threads = 1,
00380 int flags = 0);
00381
00382 virtual ~ACE_Thread_Strategy (void);
00383
00384
00385
00386
00387
00388
00389
00390
00391 virtual int activate_svc_handler (SVC_HANDLER *svc_handler,
00392 void *arg = 0);
00393
00394
00395 void dump (void) const;
00396
00397
00398 ACE_ALLOC_HOOK_DECLARE;
00399
00400 protected:
00401 typedef ACE_Concurrency_Strategy<SVC_HANDLER> inherited;
00402
00403
00404 ACE_Thread_Manager *thr_mgr_;
00405
00406
00407 long thr_flags_;
00408
00409
00410 int n_threads_;
00411 };
00412
00413
00414
00415
00416
00417
00418
00419
00420
00421
00422
00423
00424
00425 template <class SVC_HANDLER>
00426 class ACE_Process_Strategy : public ACE_Concurrency_Strategy<SVC_HANDLER>
00427 {
00428 public:
00429
00430
00431 typedef ACE_Concurrency_Strategy<SVC_HANDLER> base_type;
00432
00433
00434
00435
00436
00437 ACE_Process_Strategy (size_t n_processes = 1,
00438 ACE_Event_Handler *acceptor = 0,
00439 ACE_Reactor * = 0,
00440 int avoid_zombies = 0);
00441
00442
00443
00444 virtual int open (size_t n_processes = 1,
00445 ACE_Event_Handler *acceptor = 0,
00446 ACE_Reactor * = 0,
00447 int avoid_zombies = 0);
00448
00449 virtual ~ACE_Process_Strategy (void);
00450
00451
00452
00453
00454
00455
00456
00457
00458 virtual int activate_svc_handler (SVC_HANDLER *svc_handler,
00459 void *arg = 0);
00460
00461
00462 void dump (void) const;
00463
00464
00465 ACE_ALLOC_HOOK_DECLARE;
00466
00467 protected:
00468 typedef ACE_Concurrency_Strategy<SVC_HANDLER> inherited;
00469
00470
00471 size_t n_processes_;
00472
00473
00474
00475
00476
00477
00478 ACE_Event_Handler *acceptor_;
00479
00480
00481
00482
00483
00484
00485 ACE_Reactor *reactor_;
00486 };
00487
00488
00489
00490
00491
00492
00493
00494
00495
00496
00497 template <class SVC_HANDLER, ACE_PEER_ACCEPTOR_1>
00498 class ACE_Accept_Strategy
00499 {
00500 public:
00501
00502
00503 typedef ACE_PEER_ACCEPTOR_ADDR addr_type;
00504 typedef ACE_PEER_ACCEPTOR acceptor_type;
00505 typedef SVC_HANDLER handler_type;
00506 typedef typename SVC_HANDLER::stream_type stream_type;
00507
00508
00509
00510 ACE_Accept_Strategy (ACE_Reactor *reactor = ACE_Reactor::instance ());
00511
00512
00513 ACE_Accept_Strategy (const ACE_PEER_ACCEPTOR_ADDR &local_addr,
00514 int restart = 0,
00515 ACE_Reactor *reactor = ACE_Reactor::instance ());
00516
00517
00518
00519 virtual int open (const ACE_PEER_ACCEPTOR_ADDR &local_addr,
00520 int reuse_addr = 0);
00521
00522
00523 virtual ACE_HANDLE get_handle (void) const;
00524
00525
00526 virtual ACE_PEER_ACCEPTOR &acceptor (void) const;
00527
00528 virtual ~ACE_Accept_Strategy (void);
00529
00530
00531
00532
00533 virtual int accept_svc_handler (SVC_HANDLER *);
00534
00535
00536 void dump (void) const;
00537
00538
00539 ACE_ALLOC_HOOK_DECLARE;
00540
00541 protected:
00542
00543 ACE_PEER_ACCEPTOR peer_acceptor_;
00544
00545
00546 ACE_Reactor *reactor_;
00547
00548
00549 int reuse_addr_;
00550
00551
00552 ACE_PEER_ACCEPTOR_ADDR peer_acceptor_addr_;
00553 };
00554
00555
00556
00557
00558
00559
00560
00561
00562
00563
00564 template <class SVC_HANDLER, ACE_PEER_CONNECTOR_1>
00565 class ACE_Connect_Strategy
00566 {
00567 public:
00568
00569
00570 typedef ACE_PEER_CONNECTOR_ADDR addr_type;
00571 typedef ACE_PEER_CONNECTOR connector_type;
00572 typedef SVC_HANDLER handler_type;
00573 typedef typename SVC_HANDLER::stream_type stream_type;
00574
00575
00576
00577 ACE_Connect_Strategy (void);
00578
00579
00580 virtual ACE_PEER_CONNECTOR &connector (void) const;
00581
00582 virtual ~ACE_Connect_Strategy (void);
00583
00584
00585
00586
00587 virtual int connect_svc_handler (SVC_HANDLER *&sh,
00588 const ACE_PEER_CONNECTOR_ADDR &remote_addr,
00589 ACE_Time_Value *timeout,
00590 const ACE_PEER_CONNECTOR_ADDR &local_addr,
00591 int reuse_addr,
00592 int flags,
00593 int perms);
00594
00595
00596
00597
00598
00599
00600 virtual int connect_svc_handler (SVC_HANDLER *&sh,
00601 SVC_HANDLER *&sh_copy,
00602 const ACE_PEER_CONNECTOR_ADDR &remote_addr,
00603 ACE_Time_Value *timeout,
00604 const ACE_PEER_CONNECTOR_ADDR &local_addr,
00605 int reuse_addr,
00606 int flags,
00607 int perms);
00608
00609
00610 void dump (void) const;
00611
00612
00613 ACE_ALLOC_HOOK_DECLARE;
00614
00615 protected:
00616
00617 ACE_PEER_CONNECTOR connector_;
00618 };
00619
00620
00621
00622
00623
00624
00625
00626
00627
00628
00629
00630 template <class SVC_HANDLER>
00631 class ACE_Scheduling_Strategy
00632 {
00633 public:
00634
00635
00636 typedef typename SVC_HANDLER::addr_type addr_type;
00637 typedef SVC_HANDLER handler_type;
00638 typedef typename SVC_HANDLER::stream_type stream_type;
00639
00640
00641
00642
00643 ACE_Scheduling_Strategy (SVC_HANDLER * = 0);
00644
00645
00646 virtual ~ACE_Scheduling_Strategy (void);
00647
00648
00649
00650
00651 virtual int suspend (void);
00652
00653
00654 virtual int resume (void);
00655
00656
00657 virtual void dump (void) const;
00658 };
00659
00660
00661
00662
00663
00664
00665
00666
00667
00668
00669 template <class SVC_HANDLER>
00670 class ACE_Schedule_All_Reactive_Strategy
00671 : public ACE_Scheduling_Strategy<SVC_HANDLER>
00672 {
00673 public:
00674
00675
00676 typedef ACE_Scheduling_Strategy<SVC_HANDLER> base_type;
00677
00678
00679
00680 ACE_Schedule_All_Reactive_Strategy (SVC_HANDLER * = 0);
00681
00682
00683
00684
00685 virtual int suspend (void);
00686
00687
00688 virtual int resume (void);
00689
00690
00691 virtual void dump (void) const;
00692
00693 protected:
00694
00695
00696 ACE_Reactor *reactor_;
00697 };
00698
00699
00700
00701
00702
00703
00704
00705
00706
00707
00708 template <class SVC_HANDLER>
00709 class ACE_Schedule_All_Threaded_Strategy
00710 : public ACE_Scheduling_Strategy<SVC_HANDLER>
00711 {
00712 public:
00713
00714
00715 typedef ACE_Scheduling_Strategy<SVC_HANDLER> base_type;
00716
00717
00718
00719 ACE_Schedule_All_Threaded_Strategy (SVC_HANDLER * = 0);
00720
00721
00722
00723
00724 virtual int suspend (void);
00725
00726
00727 virtual int resume (void);
00728
00729
00730 virtual void dump (void) const;
00731
00732 protected:
00733
00734
00735 ACE_Thread_Manager *thr_mgr_;
00736 };
00737
00738
00739
00740
00741
00742
00743
00744
00745
00746
00747
00748
00749 template <class SVC_HANDLER>
00750 class ACE_NOOP_Creation_Strategy : public ACE_Creation_Strategy<SVC_HANDLER>
00751 {
00752 public:
00753
00754
00755 typedef ACE_Creation_Strategy<SVC_HANDLER> base_type;
00756
00757
00758 virtual int make_svc_handler (SVC_HANDLER *&);
00759 };
00760
00761
00762
00763
00764
00765
00766
00767
00768
00769
00770
00771
00772 template <class SVC_HANDLER>
00773 class ACE_NOOP_Concurrency_Strategy
00774 : public ACE_Concurrency_Strategy<SVC_HANDLER>
00775 {
00776 public:
00777
00778
00779 typedef ACE_Concurrency_Strategy<SVC_HANDLER> base_type;
00780
00781
00782
00783 virtual int activate_svc_handler (SVC_HANDLER *svc_handler,
00784 void *arg = 0);
00785 };
00786
00787 template <class T>
00788 class ACE_Refcounted_Hash_Recyclable : public ACE_Refcountable,
00789 public ACE_Hashable,
00790 public ACE_Recyclable
00791 {
00792 public:
00793
00794 ACE_Refcounted_Hash_Recyclable (void);
00795
00796
00797 ACE_Refcounted_Hash_Recyclable (const T &t,
00798 long refcount = 0,
00799 ACE_Recyclable_State state = ACE_RECYCLABLE_UNKNOWN);
00800
00801
00802 virtual ~ACE_Refcounted_Hash_Recyclable (void);
00803
00804
00805 bool operator== (const ACE_Refcounted_Hash_Recyclable<T> &rhs) const;
00806 bool operator!= (const ACE_Refcounted_Hash_Recyclable<T> &rhs) const;
00807
00808 T &subject ();
00809
00810 protected:
00811
00812 u_long hash_i (void) const;
00813
00814 T t_;
00815 };
00816
00817
00818
00819
00820
00821
00822
00823
00824
00825
00826
00827
00828 template <class SVC_HANDLER, ACE_PEER_CONNECTOR_1, class MUTEX>
00829 class ACE_Cached_Connect_Strategy
00830 : public ACE_Connection_Recycling_Strategy,
00831 public ACE_Connect_Strategy<SVC_HANDLER, ACE_PEER_CONNECTOR_2>
00832 {
00833 public:
00834
00835
00836 typedef ACE_Creation_Strategy<SVC_HANDLER>
00837 creation_strategy_type;
00838 typedef ACE_Connect_Strategy<SVC_HANDLER, ACE_PEER_CONNECTOR_2>
00839 connect_strategy_type;
00840 typedef ACE_Concurrency_Strategy<SVC_HANDLER>
00841 concurrency_strategy_type;
00842 typedef ACE_Recycling_Strategy<SVC_HANDLER> recycling_strategy_type;
00843
00844
00845 typedef ACE_Creation_Strategy<SVC_HANDLER>
00846 CREATION_STRATEGY;
00847 typedef ACE_Concurrency_Strategy<SVC_HANDLER>
00848 CONCURRENCY_STRATEGY;
00849 typedef ACE_Recycling_Strategy<SVC_HANDLER>
00850 RECYCLING_STRATEGY;
00851
00852
00853 typedef ACE_Connect_Strategy<SVC_HANDLER, ACE_PEER_CONNECTOR_2>
00854 CONNECT_STRATEGY;
00855
00856
00857 typedef ACE_Cached_Connect_Strategy<SVC_HANDLER, ACE_PEER_CONNECTOR_2, MUTEX> SELF;
00858
00859
00860 ACE_Cached_Connect_Strategy (ACE_Creation_Strategy<SVC_HANDLER> *cre_s = 0,
00861 ACE_Concurrency_Strategy<SVC_HANDLER> *con_s = 0,
00862 ACE_Recycling_Strategy<SVC_HANDLER> *rec_s = 0,
00863 MUTEX *mutex = 0,
00864 bool delete_lock = false);
00865
00866
00867 virtual ~ACE_Cached_Connect_Strategy (void);
00868
00869
00870
00871 virtual int open (ACE_Creation_Strategy<SVC_HANDLER> *cre_s,
00872 ACE_Concurrency_Strategy<SVC_HANDLER> *con_s,
00873 ACE_Recycling_Strategy<SVC_HANDLER> *rec_s);
00874
00875
00876 virtual int make_svc_handler (SVC_HANDLER *&sh);
00877
00878
00879 virtual int activate_svc_handler (SVC_HANDLER *svc_handler);
00880
00881
00882
00883 virtual int assign_recycler (SVC_HANDLER *svc_handler,
00884 ACE_Connection_Recycling_Strategy *recycler,
00885 const void *recycling_act);
00886
00887
00888 virtual int prepare_for_recycling (SVC_HANDLER *svc_handler);
00889
00890
00891
00892
00893
00894
00895
00896
00897
00898
00899
00900
00901
00902
00903
00904 virtual int connect_svc_handler (SVC_HANDLER *&sh,
00905 const ACE_PEER_CONNECTOR_ADDR &remote_addr,
00906 ACE_Time_Value *timeout,
00907 const ACE_PEER_CONNECTOR_ADDR &local_addr,
00908 int reuse_addr,
00909 int flags,
00910 int perms);
00911 virtual int connect_svc_handler (SVC_HANDLER *&sh,
00912 SVC_HANDLER *&sh_copy,
00913 const ACE_PEER_CONNECTOR_ADDR &remote_addr,
00914 ACE_Time_Value *timeout,
00915 const ACE_PEER_CONNECTOR_ADDR &local_addr,
00916 int reuse_addr,
00917 int flags,
00918 int perms);
00919
00920
00921 virtual int purge (const void *recycling_act);
00922
00923
00924 virtual int cache (const void *recycling_act);
00925
00926
00927 virtual int recycle_state (const void *recycling_act,
00928 ACE_Recyclable_State new_state);
00929 virtual ACE_Recyclable_State recycle_state (const void *recycling_act) const;
00930
00931
00932 virtual int mark_as_closed (const void *recycling_act);
00933
00934
00935
00936
00937
00938
00939 virtual int mark_as_closed_i (const void *recycling_act);
00940
00941
00942 virtual int cleanup_hint (const void *recycling_act,
00943 void **act_holder = 0);
00944
00945
00946 typedef ACE_Refcounted_Hash_Recyclable<ACE_PEER_CONNECTOR_ADDR>
00947 REFCOUNTED_HASH_RECYCLABLE_ADDRESS;
00948 typedef ACE_Hash_Map_Manager_Ex<REFCOUNTED_HASH_RECYCLABLE_ADDRESS, SVC_HANDLER *, ACE_Hash<REFCOUNTED_HASH_RECYCLABLE_ADDRESS>, ACE_Equal_To<REFCOUNTED_HASH_RECYCLABLE_ADDRESS>, ACE_Null_Mutex>
00949 CONNECTION_MAP;
00950
00951 typedef typename CONNECTION_MAP::ITERATOR CONNECTION_MAP_ITERATOR;
00952 typedef typename CONNECTION_MAP::ENTRY CONNECTION_MAP_ENTRY;
00953
00954 typedef ACE_Reverse_Lock<MUTEX> REVERSE_MUTEX;
00955
00956
00957 virtual ACE_Creation_Strategy<SVC_HANDLER> *creation_strategy (void) const;
00958 virtual ACE_Recycling_Strategy<SVC_HANDLER> *recycling_strategy (void) const;
00959 virtual ACE_Concurrency_Strategy<SVC_HANDLER> *concurrency_strategy (void) const;
00960
00961 protected:
00962
00963
00964 virtual int new_connection (SVC_HANDLER *&sh,
00965 const ACE_PEER_CONNECTOR_ADDR &remote_addr,
00966 ACE_Time_Value *timeout,
00967 const ACE_PEER_CONNECTOR_ADDR &local_addr,
00968 int reuse_addr,
00969 int flags,
00970 int perms);
00971
00972
00973 int find (REFCOUNTED_HASH_RECYCLABLE_ADDRESS &search_addr,
00974 CONNECTION_MAP_ENTRY *&entry);
00975
00976
00977 virtual int purge_i (const void *recycling_act);
00978
00979
00980 virtual int cache_i (const void *recycling_act);
00981
00982
00983 virtual int recycle_state_i (const void *recycling_act,
00984 ACE_Recyclable_State new_state);
00985
00986
00987 virtual ACE_Recyclable_State recycle_state_i (const void *recycling_act) const;
00988
00989
00990 virtual int cleanup_hint_i (const void *recycling_act,
00991 void **act_holder);
00992
00993
00994 int check_hint_i (SVC_HANDLER *&sh,
00995 const ACE_PEER_CONNECTOR_ADDR &remote_addr,
00996 ACE_Time_Value *timeout,
00997 const ACE_PEER_CONNECTOR_ADDR &local_addr,
00998 int reuse_addr,
00999 int flags,
01000 int perms,
01001 CONNECTION_MAP_ENTRY *&entry,
01002 int &found);
01003
01004 int find_or_create_svc_handler_i (SVC_HANDLER *&sh,
01005 const ACE_PEER_CONNECTOR_ADDR &remote_addr,
01006 ACE_Time_Value *timeout,
01007 const ACE_PEER_CONNECTOR_ADDR &local_addr,
01008 int reuse_addr,
01009 int flags,
01010 int perms,
01011 CONNECTION_MAP_ENTRY *&entry,
01012 int &found);
01013
01014 virtual int connect_svc_handler_i (
01015 SVC_HANDLER *&sh,
01016 const ACE_PEER_CONNECTOR_ADDR &remote_addr,
01017 ACE_Time_Value *timeout,
01018 const ACE_PEER_CONNECTOR_ADDR &local_addr,
01019 int reuse_addr,
01020 int flags,
01021 int perms,
01022 int &found);
01023
01024
01025 CONNECTION_MAP connection_map_;
01026
01027
01028 MUTEX *lock_;
01029
01030
01031 bool delete_lock_;
01032
01033
01034 REVERSE_MUTEX *reverse_lock_;
01035
01036
01037
01038
01039 CREATION_STRATEGY *creation_strategy_;
01040
01041
01042
01043 bool delete_creation_strategy_;
01044
01045
01046 CONCURRENCY_STRATEGY *concurrency_strategy_;
01047
01048
01049
01050 bool delete_concurrency_strategy_;
01051
01052
01053 RECYCLING_STRATEGY *recycling_strategy_;
01054
01055
01056
01057 bool delete_recycling_strategy_;
01058 };
01059
01060 ACE_END_VERSIONED_NAMESPACE_DECL
01061
01062 #if defined (__ACE_INLINE__)
01063 #include "ace/Strategies_T.inl"
01064 #endif
01065
01066 #if defined (ACE_TEMPLATES_REQUIRE_SOURCE)
01067 #include "ace/Strategies_T.cpp"
01068 #endif
01069
01070 #if defined (ACE_TEMPLATES_REQUIRE_PRAGMA)
01071 #pragma implementation ("Strategies_T.cpp")
01072 #endif
01073
01074 #include "ace/post.h"
01075
01076 #endif