diff options
Diffstat (limited to 'TAO/tao/Strategies/SHMIOP_Transport.cpp')
-rw-r--r-- | TAO/tao/Strategies/SHMIOP_Transport.cpp | 54 |
1 files changed, 33 insertions, 21 deletions
diff --git a/TAO/tao/Strategies/SHMIOP_Transport.cpp b/TAO/tao/Strategies/SHMIOP_Transport.cpp index e6e53353061..ae99103d5f6 100644 --- a/TAO/tao/Strategies/SHMIOP_Transport.cpp +++ b/TAO/tao/Strategies/SHMIOP_Transport.cpp @@ -1,14 +1,10 @@ // This may look like C, but it's really -*- C++ -*- // $Id$ - #include "SHMIOP_Transport.h" #if defined (TAO_HAS_SHMIOP) && (TAO_HAS_SHMIOP != 0) -ACE_RCSID (Strategies, SHMIOP_Transport, "$Id$") - - #include "SHMIOP_Connection_Handler.h" #include "SHMIOP_Profile.h" #include "tao/Timeprobe.h" @@ -27,6 +23,7 @@ ACE_RCSID (Strategies, SHMIOP_Transport, "$Id$") # include "SHMIOP_Transport.i" #endif /* ! __ACE_INLINE__ */ +ACE_RCSID (Strategies, SHMIOP_Transport, "$Id$") TAO_SHMIOP_Transport::TAO_SHMIOP_Transport (TAO_SHMIOP_Connection_Handler *handler, TAO_ORB_Core *orb_core, @@ -70,12 +67,23 @@ TAO_SHMIOP_Transport::messaging_object (void) ssize_t -TAO_SHMIOP_Transport::send_i (const ACE_Message_Block *message_block, - const ACE_Time_Value *max_wait_time, - size_t *) +TAO_SHMIOP_Transport::send_i (iovec *iov, int iovcnt, + size_t &bytes_transferred, + const ACE_Time_Value *max_wait_time) { - return this->connection_handler_->peer ().send (message_block, - max_wait_time); + bytes_transferred = 0; + for (int i = 0; i < iovcnt; ++i) + { + ssize_t retval = + this->connection_handler_->peer ().send (iov[i].iov_base, + iov[i].iov_len, + max_wait_time); + if (retval > 0) + bytes_transferred += retval; + if (retval <= 0) + return retval; + } + return bytes_transferred; } ssize_t @@ -127,6 +135,21 @@ TAO_SHMIOP_Transport::read_process_message (ACE_Time_Value *max_wait_time, int TAO_SHMIOP_Transport::register_handler_i (void) { + if (TAO_debug_level > 4) + { + ACE_DEBUG ((LM_DEBUG, + "TAO (%P|%t) - IIOP_Transport::register_handler %d\n", + this->id ())); + } + if (this->connection_handler_->is_registered ()) + { + ACE_DEBUG ((LM_DEBUG, + "TAO (%P|%t) - IIOP_Transport::register_handler %d" + ", already registered\n", + this->id ())); + return 0; + } + // @@ It seems like this method should go away, the right reactor is // picked at object creation time. ACE_Reactor *r = this->orb_core_->reactor (); @@ -180,7 +203,7 @@ TAO_SHMIOP_Transport::send_message (TAO_OutputCDR &stream, // versions seem to need it though. Leaving it costs little. // This guarantees to send all data (bytes) or return an error. - ssize_t n = this->send_or_buffer (stub, + ssize_t n = this->send_message_i (stub, twoway, stream.begin (), max_wait_time); @@ -196,17 +219,6 @@ TAO_SHMIOP_Transport::send_message (TAO_OutputCDR &stream, return -1; } - // EOF. - if (n == 0) - { - if (TAO_debug_level) - ACE_DEBUG ((LM_DEBUG, - ACE_TEXT ("TAO: (%P|%t|%N|%l) send_message () \n") - ACE_TEXT ("EOF, closing transport %d\n"), - this->id ())); - return -1; - } - return 1; } |