#include <UPIPE_Stream.h>
Inheritance diagram for ACE_UPIPE_Stream:


Public Types | |
| typedef ACE_Stream< ACE_SYNCH > | MT_Stream | 
| typedef ACE_UPIPE_Addr | PEER_ADDR | 
Public Member Functions | |
| ACE_UPIPE_Stream (void) | |
| virtual | ~ACE_UPIPE_Stream (void) | 
| int | close (void) | 
| Shut down the UPIPE and release resources.   | |
| ACE_HANDLE | get_handle (void) const | 
| Return the underlying I/O handle.   | |
| int | send (ACE_Message_Block *mb_p, ACE_Time_Value *timeout=0) | 
| int | recv (ACE_Message_Block *&mb_p, ACE_Time_Value *timeout=0) | 
| ssize_t | send (const char *buffer, size_t n, ACE_Time_Value *timeout=0) | 
| ssize_t | recv (char *buffer, size_t n, ACE_Time_Value *timeout=0) | 
| ssize_t | send_n (const char *buffer, size_t n, ACE_Time_Value *timeout=0) | 
| ssize_t | recv_n (char *buffer, size_t n, ACE_Time_Value *timeout=0) | 
| int | control (int cmd, void *val) const | 
| Perform control operations on the UPIPE_Stream.   | |
| int | get_remote_addr (ACE_UPIPE_Addr &remote_sap) const | 
| Return the remote address we are connected to.   | |
| void | dump (void) const | 
| Dump the state of an object.   | |
Public Attributes | |
| ACE_ALLOC_HOOK_DECLARE | |
| Declare the dynamic allocation hooks.   | |
Private Attributes | |
| ACE_Message_Block * | mb_last_ | 
| ACE_UPIPE_Addr | remote_addr_ | 
| Address of who we are connected to.   | |
| MT_Stream | stream_ | 
| int | reference_count_ | 
Friends | |
| class | ACE_UPIPE_Acceptor | 
| class | ACE_UPIPE_Connector | 
Definition at line 38 of file UPIPE_Stream.h.
      
  | 
  
| 
 
 Definition at line 44 of file UPIPE_Stream.h.  | 
  
      
  | 
  
| 
 
 Definition at line 107 of file UPIPE_Stream.h.  | 
  
      
  | 
  
| 
 
 Definition at line 19 of file UPIPE_Stream.cpp. References ACE_TRACE. 
 00020 : mb_last_ (0), 00021 reference_count_ (0) 00022 { 00023 ACE_TRACE ("ACE_UPIPE_Stream::ACE_UPIPE_STREAM"); 00024 }  | 
  
      
  | 
  
| 
 
 Definition at line 26 of file UPIPE_Stream.cpp. References mb_last_, and ACE_Message_Block::release(). 
  | 
  
      
  | 
  
| 
 Shut down the UPIPE and release resources. 
 Reimplemented from ACE_SPIPE. Definition at line 54 of file UPIPE_Stream.cpp. References ACE_GUARD_RETURN, ACE_TRACE, ACE_Stream<>::close(), ACE_SPIPE::close(), and ACE_IPC_SAP::get_handle(). 
 00055 {
00056   ACE_TRACE ("ACE_UPIPE_Stream::close");
00057   ACE_MT (ACE_GUARD_RETURN (ACE_Thread_Mutex, ace_mon, this->lock_, -1));
00058 
00059   this->reference_count_--;
00060 
00061   if (this->reference_count_ == 0)
00062     {
00063       // Since the UPIPE should have been closed earlier we won't bother
00064       // checking to see if closing it now fails.
00065 
00066       if (this->ACE_SPIPE::get_handle () != ACE_INVALID_HANDLE)
00067         this->ACE_SPIPE::close ();
00068 
00069       // Close down the ACE_stream.
00070       return this->stream_.close ();
00071     }
00072   return 0;
00073 }
 | 
  
      
  | 
  ||||||||||||
| 
 Perform control operations on the UPIPE_Stream. 
 Reimplemented from ACE_IPC_SAP. Definition at line 36 of file UPIPE_Stream.cpp. References ACE_IO_Cntl_Msg::ACE_IO_Cntl_Cmds, and ACE_TRACE. 
 00038 {
00039   ACE_TRACE ("ACE_UPIPE_Stream::control");
00040 
00041   return ((ACE_UPIPE_Stream *) this)->stream_.control
00042     ((ACE_IO_Cntl_Msg::ACE_IO_Cntl_Cmds) cmd, val);
00043 }
 | 
  
      
  | 
  
| 
 Dump the state of an object. 
 Reimplemented from ACE_SPIPE. Definition at line 46 of file UPIPE_Stream.cpp. References ACE_TRACE. 
 00047 {
00048 #if defined (ACE_HAS_DUMP)
00049   ACE_TRACE ("ACE_UPIPE_Stream::dump");
00050 #endif /* ACE_HAS_DUMP */
00051 }
 | 
  
      
  | 
  
| 
 Return the underlying I/O handle. 
 Reimplemented from ACE_IPC_SAP. Definition at line 8 of file UPIPE_Stream.inl. References ACE_TRACE, and ACE_IPC_SAP::get_handle(). Referenced by ACE_UPIPE_Acceptor::accept(), and ACE_UPIPE_Connector::connect(). 
 00009 {
00010   ACE_TRACE ("ACE_UPIPE_Stream::get_handle");
00011   return this->ACE_SPIPE::get_handle ();
00012 }
 | 
  
      
  | 
  
| 
 Return the remote address we are connected to. 
 Definition at line 76 of file UPIPE_Stream.cpp. References ACE_TRACE. 
 00077 {
00078   ACE_TRACE ("ACE_UPIPE_Stream::get_remote_addr");
00079   remote_sap = this->remote_addr_;
00080   return 0;
00081 }
 | 
  
      
  | 
  ||||||||||||||||
| 
 Recv a buffer of upto n bytes from the message queue. Returns -1 on error, else number of bytes read. Definition at line 120 of file UPIPE_Stream.cpp. References ACE_TRACE, EWOULDBLOCK, ACE_Stream<>::get(), ACE_Message_Block::length(), mb_last_, ACE_OS::memcpy(), ACE_Message_Block::rd_ptr(), and ACE_Message_Block::release(). 
 00123 {
00124   ACE_TRACE ("ACE_UPIPE_Stream::recv");
00125   // Index in buffer.
00126   size_t bytes_read = 0;
00127 
00128   while (bytes_read < n)
00129     if (this->mb_last_ != 0)
00130       {
00131         // We have remaining data in our last read Message_Buffer.
00132         size_t this_len = this->mb_last_->length ();
00133         if (this_len < n)
00134           {
00135             // The remaining data is not enough.
00136 
00137             ACE_OS::memcpy ((void *) &buffer[bytes_read],
00138                             this->mb_last_->rd_ptr (),
00139                             this_len);
00140             bytes_read += this_len;
00141             this->mb_last_ = this->mb_last_->release ();   // mb_last_ now 0
00142             return static_cast<ssize_t> (bytes_read);
00143           }
00144         else
00145           {
00146             // The remaining data is at least enough.  If there's
00147             // more, we'll get it the next time through.
00148             ACE_OS::memcpy (&buffer[bytes_read],
00149                             this->mb_last_->rd_ptr (),
00150                             n);
00151             bytes_read += n;
00152 
00153             // Advance rd_ptr.
00154             this->mb_last_->rd_ptr (n);
00155 
00156             if (this->mb_last_->length () == 0)
00157               // Now the Message_Buffer is empty.
00158               this->mb_last_ = this->mb_last_->release ();
00159           }
00160       }
00161     else
00162       {
00163         // We have to get a new Message_Buffer from our stream.
00164         int result = this->stream_.get (this->mb_last_, timeout);
00165 
00166         if (result == -1)
00167           {
00168             if (errno == EWOULDBLOCK && bytes_read > 0)
00169               // Return the number of bytes read before we timed out.
00170               return static_cast<ssize_t> (bytes_read);
00171             else
00172               return -1;
00173           }
00174       }
00175 
00176   return static_cast<ssize_t> (bytes_read);
00177 }
 | 
  
      
  | 
  ||||||||||||
| 
 Recv a message from the message queue. Returns -1 on error, else 0. Definition at line 91 of file UPIPE_Stream.cpp. References ACE_Stream<>::get(). Referenced by ACE_UPIPE_Connector::connect(), and recv_n(). 
  | 
  
      
  | 
  ||||||||||||||||
| 
 Recv a buffer of exactly n bytes from the message queue. Returns -1 on error, else the number of bytes read. Definition at line 205 of file UPIPE_Stream.cpp. References ACE_TRACE, recv(), and ssize_t. 
 00208 {
00209   ACE_TRACE ("ACE_UPIPE_Stream::recv_n");
00210   size_t bytes_read;
00211   ssize_t len = 0;
00212 
00213   for (bytes_read = 0;
00214        bytes_read < n;
00215        bytes_read += len)
00216     {
00217       len = this->recv (buf + bytes_read,
00218                         n - bytes_read,
00219                         timeout);
00220       if (len == -1)
00221         return -1;
00222       else if (len == 0)
00223         break;
00224     }
00225 
00226   return bytes_read;
00227 }
 | 
  
      
  | 
  ||||||||||||||||
| 
 Send a buffer of n bytes through the message queue. Returns -1 on error, else number of bytes sent. Definition at line 100 of file UPIPE_Stream.cpp. References ACE_NEW_RETURN, ACE_TRACE, ACE_Message_Block::copy(), and ACE_Stream<>::put(). 
 00103 {
00104   ACE_TRACE ("ACE_UPIPE_Stream::send");
00105 
00106   ACE_Message_Block *mb_p;
00107   ACE_NEW_RETURN (mb_p,
00108                   ACE_Message_Block (n),
00109                   -1);
00110   mb_p->copy (buffer, n);
00111   return
00112     this->stream_.put (mb_p, timeout) == -1
00113     ? -1
00114     : static_cast<ssize_t> (n);
00115 }
 | 
  
      
  | 
  ||||||||||||
| 
 Send a message through the message queue. Returns -1 on error, else 0. Definition at line 84 of file UPIPE_Stream.cpp. References ACE_TRACE, and ACE_Stream<>::put(). Referenced by ACE_UPIPE_Acceptor::accept(), and send_n(). 
  | 
  
      
  | 
  ||||||||||||||||
| 
 Send a buffer of exactly n bytes to the message queue. Returns -1 on error, else number of bytes written (which should == n). Definition at line 180 of file UPIPE_Stream.cpp. References ACE_TRACE, send(), and ssize_t. 
 00183 {
00184   ACE_TRACE ("ACE_UPIPE_Stream::send_n");
00185 
00186   size_t bytes_written;
00187   ssize_t len = 0;
00188 
00189   for (bytes_written = 0;
00190        bytes_written < n;
00191        bytes_written += len)
00192     {
00193       len = this->send (buf + bytes_written,
00194                         n - bytes_written,
00195                         timeout);
00196 
00197       if (len == -1)
00198         return -1;
00199     }
00200 
00201   return bytes_written;
00202 }
 | 
  
      
  | 
  
| 
 
 Definition at line 41 of file UPIPE_Stream.h.  | 
  
      
  | 
  
| 
 
 Definition at line 42 of file UPIPE_Stream.h.  | 
  
      
  | 
  
| 
 Declare the dynamic allocation hooks. 
 Reimplemented from ACE_SPIPE. Definition at line 104 of file UPIPE_Stream.h.  | 
  
      
  | 
  
| 
 To hold the last ACE_Message_Block read out of the stream. Thus allowing subsequent reads from one ACE_Message_Block Definition at line 112 of file UPIPE_Stream.h. Referenced by recv(), and ~ACE_UPIPE_Stream().  | 
  
      
  | 
  
| 
 Keep track of whether the sender and receiver have both shut down. Definition at line 123 of file UPIPE_Stream.h. Referenced by ACE_UPIPE_Acceptor::accept(), and ACE_UPIPE_Connector::connect().  | 
  
      
  | 
  
| 
 Address of who we are connected to. 
 Definition at line 115 of file UPIPE_Stream.h. Referenced by ACE_UPIPE_Acceptor::accept(), and ACE_UPIPE_Connector::connect().  | 
  
      
  | 
  
| 
 
Stream component used by the  Definition at line 119 of file UPIPE_Stream.h. Referenced by ACE_UPIPE_Acceptor::accept().  | 
  
 
1.3.6