00001
00002
00003
00004
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, "$Id: TLI_Stream.cpp 69051 2005-10-28 16:14:56Z ossama $")
00011
00012 #if defined (ACE_HAS_TLI)
00013
00014 #if !defined (__ACE_INLINE__)
00015 #include "ace/TLI_Stream.inl"
00016 #endif
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
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
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
00076
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
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