00001 #include "tao/Reactive_Connect_Strategy.h"
00002 #include "tao/Connection_Handler.h"
00003 #include "tao/ORB_Core.h"
00004 #include "tao/debug.h"
00005 #include "tao/Transport.h"
00006 #include "tao/LF_Multi_Event.h"
00007
00008 #include "ace/Synch_Options.h"
00009
00010 ACE_RCSID(tao,
00011 Reactive_Connect_Strategy,
00012 "Reactive_Connect_Strategy.cpp,v 1.14 2006/04/26 17:12:47 mesnier_p Exp")
00013
00014
00015 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00016
00017 TAO_Reactive_Connect_Strategy::TAO_Reactive_Connect_Strategy (
00018 TAO_ORB_Core *orb_core)
00019 : TAO_Connect_Strategy (orb_core)
00020 {
00021 }
00022
00023 TAO_Reactive_Connect_Strategy::~TAO_Reactive_Connect_Strategy (void)
00024 {
00025 }
00026
00027 void
00028 TAO_Reactive_Connect_Strategy::synch_options (ACE_Time_Value *timeout,
00029 ACE_Synch_Options &options)
00030 {
00031 if (timeout != 0)
00032 {
00033 options.set (ACE_Synch_Options::USE_REACTOR,
00034 *timeout);
00035 }
00036 else
00037 {
00038
00039 options.set (ACE_Synch_Options::USE_REACTOR,
00040 ACE_Time_Value::zero);
00041 }
00042 }
00043
00044 int
00045 TAO_Reactive_Connect_Strategy::wait_i (TAO_LF_Event *ev,
00046 TAO_Transport *,
00047 ACE_Time_Value * max_wait_time)
00048 {
00049 int result = 0;
00050 if (ev == 0)
00051 return -1;
00052
00053 if (TAO_debug_level > 2)
00054 {
00055 ACE_DEBUG ((LM_DEBUG,
00056 ACE_TEXT ("TAO (%P|%t) - Waiting in the Reactor for ")
00057 ACE_TEXT ("connection completion - wait ()\n")));
00058 }
00059
00060 ACE_DECLARE_NEW_CORBA_ENV;
00061 ACE_TRY
00062 {
00063 while (ev->keep_waiting ())
00064 {
00065 result =
00066 this->orb_core_->run (max_wait_time, 1 ACE_ENV_ARG_PARAMETER);
00067 ACE_TRY_CHECK;
00068
00069
00070 if (result == 0 &&
00071 max_wait_time != 0 &&
00072 *max_wait_time == ACE_Time_Value::zero)
00073 {
00074 errno = ETIME;
00075 result = -1;
00076 break;
00077 }
00078
00079
00080 if (result == -1)
00081 break;
00082 }
00083 }
00084 ACE_CATCHANY
00085 {
00086 result = -1;
00087 }
00088 ACE_ENDTRY;
00089
00090
00091 if (result != -1 && ev->error_detected ())
00092 {
00093 result = -1;
00094 }
00095
00096 return result;
00097 }
00098
00099 TAO_END_VERSIONED_NAMESPACE_DECL