diff options
Diffstat (limited to 'TAO/tao/Reactive_Connect_Strategy.cpp')
-rw-r--r-- | TAO/tao/Reactive_Connect_Strategy.cpp | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/TAO/tao/Reactive_Connect_Strategy.cpp b/TAO/tao/Reactive_Connect_Strategy.cpp new file mode 100644 index 00000000000..707c9ca9c4f --- /dev/null +++ b/TAO/tao/Reactive_Connect_Strategy.cpp @@ -0,0 +1,96 @@ +#include "tao/Reactive_Connect_Strategy.h" +#include "tao/Connection_Handler.h" +#include "tao/ORB_Core.h" +#include "tao/debug.h" +#include "tao/Transport.h" +#include "tao/LF_Multi_Event.h" + +#include "ace/Synch_Options.h" + +ACE_RCSID(tao, + Reactive_Connect_Strategy, + "$Id$") + + +TAO_BEGIN_VERSIONED_NAMESPACE_DECL + +TAO_Reactive_Connect_Strategy::TAO_Reactive_Connect_Strategy ( + TAO_ORB_Core *orb_core) + : TAO_Connect_Strategy (orb_core) +{ +} + +TAO_Reactive_Connect_Strategy::~TAO_Reactive_Connect_Strategy (void) +{ +} + +void +TAO_Reactive_Connect_Strategy::synch_options (ACE_Time_Value *timeout, + ACE_Synch_Options &options) +{ + if (timeout != 0) + { + options.set (ACE_Synch_Options::USE_REACTOR, + *timeout); + } + else + { + // Making it sure it is blocking. + options.set (ACE_Synch_Options::USE_REACTOR, + ACE_Time_Value::zero); + } +} + +int +TAO_Reactive_Connect_Strategy::wait_i (TAO_LF_Event *ev, + TAO_Transport *, + ACE_Time_Value * max_wait_time) +{ + int result = 0; + if (ev == 0) + return -1; + + if (TAO_debug_level > 2) + { + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("TAO (%P|%t) - Waiting in the Reactor for ") + ACE_TEXT ("connection completion - wait ()\n"))); + } + + try + { + while (ev->keep_waiting ()) + { + result = + this->orb_core_->run (max_wait_time, 1); + + // Did we timeout? If so, stop running the loop. + if (result == 0 && + max_wait_time != 0 && + *max_wait_time == ACE_Time_Value::zero) + { + errno = ETIME; + result = -1; + break; + } + + // Other errors? If so, stop running the loop. + if (result == -1) + break; + } + } + catch (const ::CORBA::Exception&) + { + result = -1; + } + + // Set the result. + if (result != -1 && ev->error_detected ()) + { + result = -1; + } + + return result; +} + +TAO_END_VERSIONED_NAMESPACE_DECL |