diff options
author | levine <levine@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1996-10-21 21:41:34 +0000 |
---|---|---|
committer | levine <levine@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1996-10-21 21:41:34 +0000 |
commit | a5fdebc5f6375078ec1763850a4ca23ec7fe6458 (patch) | |
tree | bcf0a25c3d45a209a6e3ac37b233a4812f29c732 /ace/TLI_Stream.cpp | |
download | ATCD-a5fdebc5f6375078ec1763850a4ca23ec7fe6458.tar.gz |
Initial revision
Diffstat (limited to 'ace/TLI_Stream.cpp')
-rw-r--r-- | ace/TLI_Stream.cpp | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/ace/TLI_Stream.cpp b/ace/TLI_Stream.cpp new file mode 100644 index 00000000000..babca46d529 --- /dev/null +++ b/ace/TLI_Stream.cpp @@ -0,0 +1,99 @@ +// TLI_Stream.cpp +// $Id$ + +/* Defines the member functions for the base class of the ACE_TLI_Stream + abstraction. */ + +#define ACE_BUILD_DLL +#include "ace/TLI_Stream.h" +#include "ace/Log_Msg.h" + +#if defined (ACE_HAS_TLI) + +ACE_ALLOC_HOOK_DEFINE(ACE_TLI_Stream) + +void +ACE_TLI_Stream::dump (void) const +{ + ACE_TRACE ("ACE_TLI_Stream::dump"); +} + +ACE_TLI_Stream::ACE_TLI_Stream (void) +{ + ACE_TRACE ("ACE_TLI_Stream::ACE_TLI_Stream"); +} + +int +ACE_TLI_Stream::get_remote_addr (ACE_Addr &sa) const +{ + ACE_TRACE ("ACE_TLI_Stream::get_remote_addr"); + struct netbuf name; + + name.maxlen = sa.get_size (); + name.buf = (char *) sa.get_addr (); + +#if defined (ACE_HAS_SVR4_TLI) + if (ACE_OS::ioctl (this->get_handle (), TI_GETPEERNAME, &name) == -1) +/* if (ACE_OS::t_getname (this->get_handle (), &name, REMOTENAME) == -1) */ + +#else /* SunOS4 sucks... */ + if (0) +#endif /* ACE_HAS_SVR4_TLI */ + return -1; + else + return 0; +} + +/* Send a release and then await the release from the other side */ + +int +ACE_TLI_Stream::active_close (void) +{ + ACE_TRACE ("ACE_TLI_Stream::active_close"); + char buf; + + if (this->sndrel () == ACE_INVALID_HANDLE) + return ACE_INVALID_HANDLE; + if (this->recv (&buf, sizeof buf) == ACE_INVALID_HANDLE) + { + if (t_errno == TLOOK && this->look () == T_ORDREL) + { + if (this->rcvrel () == ACE_INVALID_HANDLE) + return ACE_INVALID_HANDLE; + } + else + return ACE_INVALID_HANDLE; + } + return this->close (); +} + +/* Acknowledge the release from the other side and then send the release to + the other side. */ + +int +ACE_TLI_Stream::passive_close (void) +{ + ACE_TRACE ("ACE_TLI_Stream::passive_close"); + if (this->rcvrel () == ACE_INVALID_HANDLE) + return ACE_INVALID_HANDLE; + if (this->sndrel () == ACE_INVALID_HANDLE) + return ACE_INVALID_HANDLE; + return this->close (); +} + + +int +ACE_TLI_Stream::close (void) +{ + ACE_TRACE ("ACE_TLI_Stream::close"); + int fd = this->get_handle (); + + this->set_handle (ACE_INVALID_HANDLE); + + if (this->rwflag_) + return ACE_OS::close (fd); + else + return ACE_OS::t_close (fd); +} + +#endif /* ACE_HAS_TLI */ |