00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 #ifndef ACE_UPIPE_STREAM_H
00016 #define ACE_UPIPE_STREAM_H
00017 #include  "ace/pre.h"
00018 
00019 #include "ace/Stream.h"
00020 
00021 #if !defined (ACE_LACKS_PRAGMA_ONCE)
00022 # pragma once
00023 #endif 
00024 
00025 #if defined (ACE_HAS_THREADS)
00026 
00027 #include "ace/SPIPE.h"
00028 #include "ace/Message_Queue.h"
00029 #include "ace/UPIPE_Addr.h"
00030 
00031 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00032 
00033 
00034 
00035 
00036 
00037 
00038 class ACE_Export ACE_UPIPE_Stream : public ACE_SPIPE
00039 {
00040 public:
00041   friend class ACE_UPIPE_Acceptor;
00042   friend class ACE_UPIPE_Connector;
00043 
00044   typedef ACE_Stream<ACE_SYNCH> MT_Stream;
00045 
00046   
00047 
00048   ACE_UPIPE_Stream (void);
00049 
00050   virtual ~ACE_UPIPE_Stream (void);
00051 
00052 
00053   int close (void);
00054 
00055 
00056   ACE_HANDLE get_handle (void) const;
00057 
00058   
00059 
00060 
00061   int send (ACE_Message_Block *mb_p,
00062             ACE_Time_Value *timeout  = 0);
00063 
00064 
00065 
00066   int recv (ACE_Message_Block *&mb_p,
00067             ACE_Time_Value *timeout  = 0);
00068 
00069   
00070 
00071 
00072   ssize_t send (const char *buffer,
00073                 size_t n,
00074                 ACE_Time_Value *timeout = 0);
00075 
00076 
00077 
00078   ssize_t recv (char *buffer,
00079                 size_t n,
00080                 ACE_Time_Value *timeout = 0);
00081 
00082 
00083 
00084   ssize_t send_n (const char *buffer,
00085                   size_t n,
00086                   ACE_Time_Value *timeout = 0);
00087 
00088 
00089 
00090   ssize_t recv_n (char *buffer,
00091                   size_t n,
00092                   ACE_Time_Value *timeout = 0);
00093 
00094 
00095   int control (int cmd, void *val) const;
00096 
00097 
00098   int get_remote_addr (ACE_UPIPE_Addr &remote_sap) const;
00099 
00100 
00101   void dump (void) const;
00102 
00103 
00104   ACE_ALLOC_HOOK_DECLARE;
00105 
00106   
00107   typedef ACE_UPIPE_Addr PEER_ADDR;
00108 
00109 private:
00110 
00111 
00112   ACE_Message_Block *mb_last_;
00113 
00114 
00115   ACE_UPIPE_Addr remote_addr_;
00116 
00117 
00118 
00119   MT_Stream stream_;
00120 
00121 
00122 
00123   int reference_count_;
00124 
00125 #if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0)
00126 
00127   ACE_Thread_Mutex lock_;
00128 #endif 
00129 };
00130 
00131 ACE_END_VERSIONED_NAMESPACE_DECL
00132 
00133 #if defined (__ACE_INLINE__)
00134 #include "ace/UPIPE_Stream.inl"
00135 #endif 
00136 
00137 #endif 
00138 
00139 #include  "ace/post.h"
00140 
00141 #endif