TLI_Stream.cpp

Go to the documentation of this file.
00001 // TLI_Stream.cpp,v 4.16 2005/10/28 16:14:56 ossama Exp
00002 
00003 /* Defines the member functions for the base class of the ACE_TLI_Stream
00004    abstraction. */
00005 
00006 #include "ace/TLI_Stream.h"
00007 #include "ace/ACE.h"
00008 #include "ace/OS_NS_unistd.h"
00009 
00010 ACE_RCSID(ace, TLI_Stream, "TLI_Stream.cpp,v 4.16 2005/10/28 16:14:56 ossama Exp")
00011 
00012 #if defined (ACE_HAS_TLI)
00013 
00014 #if !defined (__ACE_INLINE__)
00015 #include "ace/TLI_Stream.inl"
00016 #endif /* __ACE_INLINE__ */
00017 
00018 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00019 
00020 ACE_ALLOC_HOOK_DEFINE(ACE_TLI_Stream)
00021 
00022 void
00023 ACE_TLI_Stream::dump (void) const
00024 {
00025 #if defined (ACE_HAS_DUMP)
00026   ACE_TRACE ("ACE_TLI_Stream::dump");
00027 #endif /* ACE_HAS_DUMP */
00028 }
00029 
00030 ACE_TLI_Stream::ACE_TLI_Stream (void)
00031   : rwflag_ (0)
00032 {
00033   ACE_TRACE ("ACE_TLI_Stream::ACE_TLI_Stream");
00034 }
00035 
00036 int
00037 ACE_TLI_Stream::get_remote_addr (ACE_Addr &sa) const
00038 {
00039   ACE_TRACE ("ACE_TLI_Stream::get_remote_addr");
00040 
00041   struct netbuf name;
00042   name.maxlen = sa.get_size ();
00043   name.buf = (char *) sa.get_addr ();
00044 
00045   if (ACE_OS::t_getname (this->get_handle (), &name, REMOTENAME) == -1)
00046     return -1;
00047   else
00048     return 0;
00049 }
00050 
00051 // Send a release and then await the release from the other side.
00052 
00053 int
00054 ACE_TLI_Stream::active_close (void)
00055 {
00056   ACE_TRACE ("ACE_TLI_Stream::active_close");
00057   char buf;
00058 
00059   if (this->sndrel () == -1)
00060     return -1;
00061   else if (this->recv (&buf, sizeof buf) == -1)
00062     {
00063       if (t_errno == TLOOK && this->look () == T_ORDREL)
00064         {
00065           if (this->rcvrel () == -1)
00066             return -1;
00067         }
00068       else
00069         return -1;
00070     }
00071 
00072   return this->close ();
00073 }
00074 
00075 // Acknowledge the release from the other side and then send the
00076 // release to the other side.
00077 
00078 int
00079 ACE_TLI_Stream::passive_close (void)
00080 {
00081   ACE_TRACE ("ACE_TLI_Stream::passive_close");
00082 
00083   if (this->rcvrel () == -1)
00084     return -1;
00085   else if (this->sndrel () == -1)
00086     return -1;
00087 
00088   return this->close ();
00089 }
00090 
00091 int
00092 ACE_TLI_Stream::close (void)
00093 {
00094   ACE_TRACE ("ACE_TLI_Stream::close");
00095 
00096   ACE_HANDLE fd = this->get_handle ();
00097 
00098   this->set_handle (ACE_INVALID_HANDLE);
00099 
00100 #if !defined (ACE_WIN32)
00101   if (this->rwflag_)
00102     return ACE_OS::close (fd);
00103   else
00104 #endif /* ACE_WIN32 */
00105     return ACE_OS::t_close (fd);
00106 }
00107 
00108 ssize_t
00109 ACE_TLI_Stream::send (const void *buf,
00110                       size_t n,
00111                       const ACE_Time_Value *timeout) const
00112 {
00113   ACE_TRACE ("ACE_TLI_Stream::send");
00114   return ACE::send (this->get_handle (),
00115                     buf,
00116                     n,
00117                     timeout);
00118 }
00119 
00120 ssize_t
00121 ACE_TLI_Stream::send (const void *buf,
00122                       size_t n,
00123                       int flags,
00124                       const ACE_Time_Value *timeout) const
00125 {
00126   ACE_TRACE ("ACE_TLI_Stream::send");
00127   return ACE::t_snd (this->get_handle (),
00128                      buf,
00129                      n,
00130                      flags,
00131                      timeout);
00132 }
00133 
00134 ssize_t
00135 ACE_TLI_Stream::recv (void *buf,
00136                       size_t n,
00137                       const ACE_Time_Value *timeout) const
00138 {
00139   ACE_TRACE ("ACE_TLI_Stream::recv");
00140   return ACE::recv (this->get_handle (),
00141                     buf,
00142                     n,
00143                     timeout);
00144 }
00145 
00146 ssize_t
00147 ACE_TLI_Stream::recv (void *buf,
00148                       size_t n,
00149                       int *flags,
00150                       const ACE_Time_Value *timeout) const
00151 {
00152   ACE_TRACE ("ACE_TLI_Stream::recv");
00153   int f = 0;
00154 
00155   if (flags == 0)
00156     flags = &f;
00157 
00158   return ACE::t_rcv (this->get_handle (),
00159                      buf,
00160                      n,
00161                      flags,
00162                      timeout);
00163 }
00164 
00165 ssize_t
00166 ACE_TLI_Stream::send_n (const void *buf,
00167                         size_t n,
00168                         const ACE_Time_Value *timeout,
00169                         size_t *bytes_transferred) const
00170 {
00171   ACE_TRACE ("ACE_TLI_Stream::send_n");
00172   return ACE::send_n (this->get_handle (),
00173                       buf,
00174                       n,
00175                       timeout,
00176                       bytes_transferred);
00177 }
00178 
00179 ssize_t
00180 ACE_TLI_Stream::send_n (const void *buf,
00181                         size_t n,
00182                         int flags,
00183                         const ACE_Time_Value *timeout,
00184                         size_t *bytes_transferred) const
00185 {
00186   ACE_TRACE ("ACE_TLI_Stream::send_n");
00187 
00188   return ACE::t_snd_n (this->get_handle (),
00189                        buf,
00190                        n,
00191                        flags,
00192                        timeout,
00193                        bytes_transferred);
00194 }
00195 
00196 ssize_t
00197 ACE_TLI_Stream::recv_n (void *buf,
00198                         size_t n,
00199                         const ACE_Time_Value *timeout,
00200                         size_t *bytes_transferred) const
00201 {
00202   ACE_TRACE ("ACE_TLI_Stream::recv_n");
00203   return ACE::recv_n (this->get_handle (),
00204                       buf,
00205                       n,
00206                       timeout,
00207                       bytes_transferred);
00208 }
00209 
00210 ssize_t
00211 ACE_TLI_Stream::recv_n (void *buf,
00212                         size_t n,
00213                         int *flags,
00214                         const ACE_Time_Value *timeout,
00215                         size_t *bytes_transferred) const
00216 {
00217   ACE_TRACE ("ACE_TLI_Stream::recv_n");
00218 
00219   return ACE::t_rcv_n (this->get_handle (),
00220                        buf,
00221                        n,
00222                        flags,
00223                        timeout,
00224                        bytes_transferred);
00225 }
00226 
00227 ACE_END_VERSIONED_NAMESPACE_DECL
00228 
00229 #endif /* ACE_HAS_TLI */

Generated on Thu Nov 9 09:42:08 2006 for ACE by doxygen 1.3.6