summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornanbor <nanbor@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1999-12-21 08:02:42 +0000
committernanbor <nanbor@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1999-12-21 08:02:42 +0000
commitb4da0e9185ef5da143e950e8cd0b08cd0ab1749c (patch)
tree5ec4a6e1f6534673b7669f4959939860f1c25383
parent878c89e0f7178f6bcd21f4f94def1c437cc76501 (diff)
downloadATCD-b4da0e9185ef5da143e950e8cd0b08cd0ab1749c.tar.gz
*** empty log message ***
-rw-r--r--ace/MEM_Acceptor.cpp132
-rw-r--r--ace/MEM_Acceptor.h81
-rw-r--r--ace/MEM_Acceptor.i4
-rw-r--r--ace/MEM_Connector.cpp77
-rw-r--r--ace/MEM_Connector.h99
-rw-r--r--ace/MEM_Connector.i6
-rw-r--r--ace/MEM_IO.h2
-rw-r--r--ace/MEM_IO.i1
-rw-r--r--ace/MEM_Stream.cpp35
-rw-r--r--ace/MEM_Stream.h119
-rw-r--r--ace/MEM_Stream.i151
11 files changed, 706 insertions, 1 deletions
diff --git a/ace/MEM_Acceptor.cpp b/ace/MEM_Acceptor.cpp
new file mode 100644
index 00000000000..26af37e247b
--- /dev/null
+++ b/ace/MEM_Acceptor.cpp
@@ -0,0 +1,132 @@
+// MEM_Acceptor.cpp
+// $Id$
+
+#define ACE_BUILD_DLL
+#include "ace/MEM_Acceptor.h"
+
+#if !defined (__ACE_INLINE__)
+#include "ace/MEM_Acceptor.i"
+#endif /* __ACE_INLINE__ */
+
+ACE_RCSID(ace, MEM_Acceptor, "$Id$")
+
+ACE_ALLOC_HOOK_DEFINE(ACE_MEM_Acceptor)
+
+void
+ACE_MEM_Acceptor::dump (void) const
+{
+ ACE_TRACE ("ACE_MEM_Acceptor::dump");
+
+ ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this));
+ this->local_addr_.dump ();
+ ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP));
+}
+
+// Do nothing routine for constructor.
+
+ACE_MEM_Acceptor::ACE_MEM_Acceptor (void)
+{
+ ACE_TRACE ("ACE_MEM_Acceptor::ACE_MEM_Acceptor");
+}
+
+// General purpose routine for performing server ACE_SOCK creation.
+
+ACE_MEM_Acceptor::ACE_MEM_Acceptor (const ACE_Addr &remote_sap,
+ int reuse_addr,
+ int protocol_family,
+ int backlog,
+ int protocol)
+{
+ ACE_TRACE ("ACE_MEM_Acceptor::ACE_MEM_Acceptor");
+ if (this->open (remote_sap,
+ reuse_addr,
+ protocol_family,
+ backlog,
+ protocol) == -1)
+ ACE_ERROR ((LM_ERROR,
+ "ACE_MEM_Acceptor::ACE_MEM_Acceptor"));
+}
+
+// General purpose routine for accepting new connections.
+
+int
+ACE_MEM_Acceptor::accept (ACE_MEM_Stream &new_stream,
+ ACE_Addr *remote_addr,
+ ACE_Time_Value *timeout,
+ int restart,
+ int reset_new_handle) const
+{
+ ACE_TRACE ("ACE_MEM_Acceptor::accept");
+
+ int in_blocking_mode = 0;
+ if (this->shared_accept_start (timeout,
+ restart,
+ in_blocking_mode) == -1)
+ return -1;
+ else
+ {
+ sockaddr *addr = 0;
+ int len = 0;
+
+ if (remote_addr != 0)
+ {
+ len = remote_addr->get_size ();
+ addr = (sockaddr *) remote_addr->get_addr ();
+ }
+
+ do
+ new_stream.set_handle (ACE_OS::accept (this->get_handle (),
+ addr,
+ &len));
+ while (new_stream.get_handle () == ACE_INVALID_HANDLE
+ && restart != 0
+ && errno == EINTR
+ && timeout == 0);
+
+ // Reset the size of the addr, which is only necessary for UNIX
+ // domain sockets.
+ if (new_stream.get_handle () != ACE_INVALID_HANDLE
+ && remote_addr != 0)
+ remote_addr->set_size (len);
+ }
+
+ return this->shared_accept_finish (new_stream,
+ in_blocking_mode,
+ reset_new_handle);
+}
+
+int
+ACE_MEM_Acceptor::shared_accept_finish (ACE_MEM_Stream new_stream,
+ int in_blocking_mode,
+ int reset_new_handle) const
+{
+ ACE_TRACE ("ACE_MEM_Acceptor::shared_accept_finish ()");
+
+ ACE_HANDLE new_handle = new_stream.get_handle ();
+
+ // Check to see if we were originally in blocking mode, and if so,
+ // set the <new_stream>'s handle and <this> handle to be in blocking
+ // mode.
+ if (in_blocking_mode)
+ {
+ // Save/restore errno.
+ ACE_Errno_Guard error (errno);
+
+ // Only disable ACE_NONBLOCK if we weren't in non-blocking mode
+ // originally.
+ ACE::clr_flags (this->get_handle (),
+ ACE_NONBLOCK);
+ ACE::clr_flags (new_handle,
+ ACE_NONBLOCK);
+ }
+
+#if defined (ACE_HAS_WINSOCK2) && (ACE_HAS_WINSOCK2 != 0)
+ if (reset_new_handle)
+ // Reset the event association inherited by the new handle.
+ ::WSAEventSelect ((SOCKET) new_handle, 0, 0);
+#else
+ ACE_UNUSED_ARG (reset_new_handle);
+#endif /* ACE_WIN32 */
+
+ return new_handle == ACE_INVALID_HANDLE ? -1 : 0;
+}
diff --git a/ace/MEM_Acceptor.h b/ace/MEM_Acceptor.h
new file mode 100644
index 00000000000..8030aa786e3
--- /dev/null
+++ b/ace/MEM_Acceptor.h
@@ -0,0 +1,81 @@
+/* -*- C++ -*- */
+// $Id$
+
+// ============================================================================
+//
+// = LIBRARY
+// ace
+//
+// = FILENAME
+// MEM_Aceeptor.h
+//
+// = AUTHOR
+// Nanbor Wang
+//
+// ============================================================================
+
+#ifndef ACE_MEM_ACCEPTOR_H
+#define ACE_MEM_ACCEPTOR_H
+
+#include "ace/SOCK_Acceptor.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "ace/UNIX_Addr.h"
+#include "ace/MEM_Stream.h"
+
+// Forward decl.
+class ACE_Reactor;
+
+class ACE_Export ACE_MEM_Acceptor : public ACE_SOCK_Acceptor
+{
+ // = TITLE
+ // Defines the format and interface for the acceptor side of the
+ // local ACE_SOCK ACE_Stream.
+public:
+ // = Initialization methods.
+ ACE_MEM_Acceptor (void);
+ // Default constructor.
+
+ ACE_MEM_Acceptor (const ACE_Addr &local_sap,
+ int reuse_addr = 0,
+ int protocol_family = PF_INET,
+ int backlog = ACE_DEFAULT_BACKLOG,
+ int protocol = 0);
+ // Initiate a passive mode socket.
+
+ int accept (ACE_MEM_Stream &new_ipc_sap,
+ ACE_Addr * = 0,
+ ACE_Time_Value *timeout = 0,
+ int restart = 1,
+ int reset_new_handle = 0) const;
+ // Accept a new data transfer connection.
+
+ int shared_accept_finish (ACE_MEM_Stream new_stream,
+ int in_blocking_mode,
+ int reset_new_handle) const;
+ // Perform operations that must occur after <ACE_OS::accept> is
+ // called.
+
+ // = Meta-type info
+ typedef ACE_INET_Addr PEER_ADDR;
+ typedef ACE_MEM_Stream PEER_STREAM;
+
+ void dump (void) const;
+ // Dump the state of an object.
+
+ ACE_ALLOC_HOOK_DECLARE;
+ // Declare the dynamic allocation hooks.
+
+private:
+ ACE_INET_Addr local_addr_;
+ // Address of our rendezvous point.
+};
+
+#if defined (__ACE_INLINE__)
+#include "ace/MEM_Acceptor.i"
+#endif /* __ACE_INLINE__ */
+
+#endif /* ACE_MEM_ACCEPTOR_H */
diff --git a/ace/MEM_Acceptor.i b/ace/MEM_Acceptor.i
new file mode 100644
index 00000000000..b7ae3f98891
--- /dev/null
+++ b/ace/MEM_Acceptor.i
@@ -0,0 +1,4 @@
+/* -*- C++ -*- */
+// $Id$
+
+// MEM_Acceptor.i
diff --git a/ace/MEM_Connector.cpp b/ace/MEM_Connector.cpp
new file mode 100644
index 00000000000..77e98aa9090
--- /dev/null
+++ b/ace/MEM_Connector.cpp
@@ -0,0 +1,77 @@
+// MEM_Connector.cpp
+// $Id$
+
+#define ACE_BUILD_DLL
+#include "ace/MEM_Connector.h"
+
+ACE_RCSID(ace, MEM_Connector, "$Id$")
+
+#if defined (ACE_LACKS_INLINE_FUNCTIONS)
+#include "ace/MEM_Connector.i"
+#endif
+
+ACE_ALLOC_HOOK_DEFINE(ACE_MEM_Connector)
+
+void
+ACE_MEM_Connector::dump (void) const
+{
+ ACE_TRACE ("ACE_MEM_Connector::dump");
+
+ ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this));
+ ACE_DEBUG ((LM_DEBUG, ASYS_TEXT ("\n")));
+ ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP));
+}
+
+ACE_MEM_Connector::ACE_MEM_Connector (void)
+{
+ ACE_TRACE ("ACE_MEM_Connector::ACE_MEM_Connector");
+}
+
+// Establish a connection.
+ACE_MEM_Connector::ACE_MEM_Connector (ACE_MEM_Stream &new_stream,
+ const ACE_INET_Addr &remote_sap,
+ ACE_Time_Value *timeout,
+ const ACE_Addr &local_sap,
+ int reuse_addr,
+ int flags,
+ int perms,
+ int protocol_family,
+ int protocol)
+{
+ ACE_TRACE ("ACE_MEM_Connector::ACE_MEM_Connector");
+ // This is necessary due to the weird inheritance relationships of
+ // ACE_MEM_Stream.
+ this->connect (new_stream,
+ remote_sap,
+ timeout,
+ local_sap,
+ reuse_addr,
+ flags,
+ perms,
+ protocol_family,
+ protocol);
+}
+
+int
+ACE_MEM_Connector::connect (ACE_MEM_Stream &new_stream,
+ const ACE_INET_Addr &remote_sap,
+ ACE_Time_Value *timeout,
+ const ACE_Addr &local_sap,
+ int reuse_addr,
+ int flags,
+ int perms,
+ int protocol_family,
+ int protocol)
+{
+ ACE_TRACE ("ACE_MEM_Connector::connect");
+
+ ACE_SOCK_Stream temp_stream;
+ int result = ACE_SOCK_Connector::connect (temp_stream, remote_sap,
+ timeout, local_sap,
+ reuse_addr, flags, perms,
+ protocol_family, protocol);
+
+ new_stream.set_handle (temp_stream.get_handle ());
+ // Do not close the handle.
+ return result;
+}
diff --git a/ace/MEM_Connector.h b/ace/MEM_Connector.h
new file mode 100644
index 00000000000..270fe118e02
--- /dev/null
+++ b/ace/MEM_Connector.h
@@ -0,0 +1,99 @@
+/* -*- C++ -*- */
+// $Id$
+
+// ============================================================================
+//
+// = LIBRARY
+// ace
+//
+// = FILENAME
+// MEM_Connector.h
+//
+// = AUTHOR
+// Nanbor Wang
+//
+// ============================================================================
+
+#ifndef ACE_MEM_CONNECTOR_H
+#define ACE_MEM_CONNECTOR_H
+
+#include "ace/SOCK_Connector.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "ace/MEM_Stream.h"
+
+class ACE_Export ACE_MEM_Connector : public ACE_SOCK_Connector
+{
+ // = TITLE
+ // Defines the format and interface for the connector side of
+ // the <ACE_MEM_Stream>.
+public:
+ // = Initialization methods.
+ ACE_MEM_Connector (void);
+ // Default constructor.
+
+ ACE_MEM_Connector (ACE_MEM_Stream &new_stream,
+ const ACE_INET_Addr &remote_sap,
+ ACE_Time_Value *timeout = 0,
+ const ACE_Addr &local_sap = ACE_Addr::sap_any,
+ int reuse_addr = 0,
+ int flags = 0,
+ int perms = 0,
+ int protocol_family = PF_INET,
+ int protocol = 0);
+ // Actively connect and produce a <new_stream> if things go well.
+ // The <remote_sap> is the address that we are trying to connect
+ // with. The <timeout> is the amount of time to wait to connect.
+ // If it's 0 then we block indefinitely. If *timeout == {0, 0} then
+ // the connection is done using non-blocking mode. In this case, if
+ // the connection can't be made immediately the value of -1 is
+ // returned with <errno == EWOULDBLOCK>. If *timeout > {0, 0} then
+ // this is the amount of time to wait before timing out. If the
+ // time expires before the connection is made <errno == ETIME>. The
+ // <local_sap> is the value of local address to bind to. If it's
+ // the default value of <ACE_Addr::sap_any> then the user is letting
+ // the OS do the binding. If <reuse_addr> == 1 then the
+ // <local_addr> is reused, even if it hasn't been cleanedup yet.
+
+ int connect (ACE_MEM_Stream &new_stream,
+ const ACE_INET_Addr &remote_sap,
+ ACE_Time_Value *timeout = 0,
+ const ACE_Addr &local_sap = ACE_Addr::sap_any,
+ int reuse_addr = 0,
+ int flags = 0,
+ int perms = 0,
+ int protcol_family = PF_INET,
+ int protocol = 0);
+ // Actively connect and produce a <new_stream> if things go well.
+ // The <remote_sap> is the address that we are trying to connect
+ // with. The <timeout> is the amount of time to wait to connect.
+ // If it's 0 then we block indefinitely. If *timeout == {0, 0} then
+ // the connection is done using non-blocking mode. In this case, if
+ // the connection can't be made immediately the value of -1 is
+ // returned with <errno == EWOULDBLOCK>. If *timeout > {0, 0} then
+ // this is the amount of time to wait before timing out. If the
+ // time expires before the connection is made <errno == ETIME>. The
+ // <local_sap> is the value of local address to bind to. If it's
+ // the default value of <ACE_Addr::sap_any> then the user is letting
+ // the OS do the binding. If <reuse_addr> == 1 then the
+ // <local_addr> is reused, even if it hasn't been cleanedup yet.
+
+ // = Meta-type info
+ typedef ACE_INET_Addr PEER_ADDR;
+ typedef ACE_MEM_Stream PEER_STREAM;
+
+ void dump (void) const;
+ // Dump the state of an object.
+
+ ACE_ALLOC_HOOK_DECLARE;
+ // Declare the dynamic allocation hooks.
+};
+
+#if !defined (ACE_LACKS_INLINE_FUNCTIONS)
+#include "ace/MEM_Connector.i"
+#endif
+
+#endif /* ACE_MEM_CONNECTOR_H */
diff --git a/ace/MEM_Connector.i b/ace/MEM_Connector.i
new file mode 100644
index 00000000000..5030a777e52
--- /dev/null
+++ b/ace/MEM_Connector.i
@@ -0,0 +1,6 @@
+/* -*- C++ -*- */
+// $Id$
+
+// MEM_Connector.i
+
+// Establish a connection.
diff --git a/ace/MEM_IO.h b/ace/MEM_IO.h
index 88fad12751d..98c5dcff628 100644
--- a/ace/MEM_IO.h
+++ b/ace/MEM_IO.h
@@ -26,7 +26,7 @@
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */
-class ACE_Export ACE_MEM_IO : public ACE_SOCK, ACE_MEM_SAP
+class ACE_Export ACE_MEM_IO : public ACE_SOCK, public ACE_MEM_SAP
{
// = TITLE
// Defines the methods for the ACE shared memeory wrapper I/O routines
diff --git a/ace/MEM_IO.i b/ace/MEM_IO.i
index 8e0fb4b1bb3..01f6484f0bd 100644
--- a/ace/MEM_IO.i
+++ b/ace/MEM_IO.i
@@ -65,6 +65,7 @@ ACE_MEM_IO::recv (void *buf, size_t n, int flags)
n -= length;
count += length;
}
+
return count;
}
diff --git a/ace/MEM_Stream.cpp b/ace/MEM_Stream.cpp
new file mode 100644
index 00000000000..de870c1c66b
--- /dev/null
+++ b/ace/MEM_Stream.cpp
@@ -0,0 +1,35 @@
+// MEM_Stream.cpp
+// $Id$
+
+#define ACE_BUILD_DLL
+#include "ace/MEM_Stream.h"
+
+#if defined (ACE_LACKS_INLINE_FUNCTIONS)
+#include "ace/MEM_Stream.i"
+#endif
+
+ACE_RCSID(ace, MEM_Stream, "$Id$")
+
+ACE_ALLOC_HOOK_DEFINE(ACE_MEM_Stream)
+
+void
+ACE_MEM_Stream::dump (void) const
+{
+ ACE_TRACE ("ACE_MEM_Stream::dump");
+}
+
+int
+ACE_MEM_Stream::close (void)
+{
+#if defined (ACE_WIN32)
+ // We need the following call to make things work correctly on
+ // Win32, which requires use to do a <close_writer> before doing the
+ // close in order to avoid losing data. Note that we don't need to
+ // do this on UNIX since it doesn't have this "feature". Moreover,
+ // this will cause subtle problems on UNIX due to the way that
+ // fork() works.
+ this->close_writer ();
+#endif /* ACE_WIN32 */
+ // Close down the socket.
+ return ACE_SOCK::close ();
+}
diff --git a/ace/MEM_Stream.h b/ace/MEM_Stream.h
new file mode 100644
index 00000000000..c93a5d04d6b
--- /dev/null
+++ b/ace/MEM_Stream.h
@@ -0,0 +1,119 @@
+/* -*- C++ -*- */
+// $Id$
+
+// ============================================================================
+//
+// = LIBRARY
+// ace
+//
+// = FILENAME
+// MEM_Stream.h
+//
+// = AUTHOR
+// Nanbor Wang
+//
+// ============================================================================
+
+#ifndef ACE_MEM_STREAM_H
+#define ACE_MEM_STREAM_H
+
+#include "ace/MEM_IO.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "ace/INET_Addr.h"
+
+class ACE_Export ACE_MEM_Stream : public ACE_MEM_IO
+{
+ // = TITLE
+ // Defines the methods in the <ACE_MEM_Stream> abstraction.
+ //
+ // = DESCRIPTION
+ // This adds additional wrapper methods atop the <ACE_MEM_IO>
+ // class.
+public:
+ // Initialization and termination methods.
+ ACE_MEM_Stream (void);
+ // Constructor.
+
+ ACE_MEM_Stream (ACE_HANDLE h);
+ // Constructor (sets the underlying <ACE_HANDLE> with <h>).
+
+ ~ACE_MEM_Stream (void);
+ // Destructor.
+
+/*
+ //= The following two methods use write and read system calls.
+ ssize_t send_n (const void *buf, int n) const;
+ // Send n bytes, keep trying until n are sent.
+ ssize_t recv_n (void *buf, int n) const;
+ // Recv n bytes, keep trying until n are received.
+
+ // = The following two methods use the send and recv system calls.
+ ssize_t send_n (const void *buf, int n, int flags) const;
+ // Send n bytes, keep trying until n are sent.
+ ssize_t recv_n (void *buf, int n, int flags) const;
+ // Recv n bytes, keep trying until n are received.
+
+ ssize_t send_n (const void *buf,
+ size_t len,
+ int flags,
+ const ACE_Time_Value *timeout);
+ // Try to send exactly <len> bytes into <buf> from <handle> (uses
+ // the <send> call). If <send> blocks for longer than <timeout> the
+ // number of bytes actually sent is returned with <errno == ETIME>.
+ // If a timeout does not occur, <send_n> return <len> (i.e., the
+ // number of bytes requested to be sent).
+
+ ssize_t recv_n (void *buf,
+ size_t len,
+ int flags,
+ const ACE_Time_Value *timeout);
+ // Try to recv exactly <len> bytes into <buf> from <handle> (uses
+ // the <ACE::recv_n> call). The <ACE_Time_Value> indicates how long
+ // to blocking trying to receive. If <timeout> == 0, the caller
+ // will block until action is possible, else will wait until the
+ // relative time specified in *<timeout> elapses). If <recv> blocks
+ // for longer than <timeout> the number of bytes actually read is
+ // returned with <errno == ETIME>. If a timeout does not occur,
+ // <recv_n> return <len> (i.e., the number of bytes requested to be
+ // read).
+
+ ssize_t sendv_n (const iovec iov[],
+ size_t n) const;
+ // Send an <iovec> of size <n> to the connected socket (uses
+ // <ACE::sendv_n>). Will block until all bytes are sent or an error
+ // occurs.
+
+ ssize_t recvv_n (iovec iov[],
+ size_t n) const;
+ // Receive an <iovec> of size <n> to the connected socket.
+*/
+ // = Selectively close endpoints.
+ int close_reader (void);
+ // Close down the reader.
+ int close_writer (void);
+ // Close down the writer.
+
+ int close (void);
+ // Close down the socket (we need this to make things work correctly
+ // on Win32, which requires use to do a <close_writer> before doing
+ // the close to avoid losing data).
+
+ // = Meta-type info
+ typedef ACE_INET_Addr PEER_ADDR;
+
+ void dump (void) const;
+ // Dump the state of an object.
+
+ ACE_ALLOC_HOOK_DECLARE;
+ // Declare the dynamic allocation hooks.
+};
+
+#if !defined (ACE_LACKS_INLINE_FUNCTIONS)
+#include "ace/MEM_Stream.i"
+#endif
+
+#endif /* ACE_MEM_STREAM_H */
diff --git a/ace/MEM_Stream.i b/ace/MEM_Stream.i
new file mode 100644
index 00000000000..a365f2d5dd0
--- /dev/null
+++ b/ace/MEM_Stream.i
@@ -0,0 +1,151 @@
+/* -*- C++ -*- */
+// $Id$
+
+// MEM_Stream.i
+
+#include "ace/MEM_Stream.h"
+
+ASYS_INLINE
+ACE_MEM_Stream::ACE_MEM_Stream (void)
+{
+ // ACE_TRACE ("ACE_MEM_Stream::ACE_MEM_Stream");
+}
+
+ASYS_INLINE
+ACE_MEM_Stream::ACE_MEM_Stream (ACE_HANDLE h)
+{
+ // ACE_TRACE ("ACE_MEM_Stream::ACE_MEM_Stream");
+ this->set_handle (h);
+}
+
+ASYS_INLINE
+ACE_MEM_Stream::~ACE_MEM_Stream (void)
+{
+ // ACE_TRACE ("ACE_MEM_Stream::~ACE_MEM_Stream");
+}
+
+ASYS_INLINE int
+ACE_MEM_Stream::close_reader (void)
+{
+ ACE_TRACE ("ACE_MEM_Stream::close_reader");
+ if (this->get_handle () != ACE_INVALID_HANDLE)
+ return ACE_OS::shutdown (this->get_handle (), 0);
+ else
+ return 0;
+}
+
+// Shut down just the writing end of a ACE_SOCK.
+
+ASYS_INLINE int
+ACE_MEM_Stream::close_writer (void)
+{
+ ACE_TRACE ("ACE_MEM_Stream::close_writer");
+ if (this->get_handle () != ACE_INVALID_HANDLE)
+ return ACE_OS::shutdown (this->get_handle (), 1);
+ else
+ return 0;
+}
+
+#if 0
+ASYS_INLINE ssize_t
+ACE_MEM_Stream::recv_n (void *buf,
+ size_t len,
+ int flags,
+ const ACE_Time_Value *timeout) const
+{
+ ACE_TRACE ("ACE_MEM_Stream::recv_n");
+ return ACE::recv_n (this->get_handle (),
+ buf,
+ len,
+ flags,
+ timeout);
+}
+
+ASYS_INLINE ssize_t
+ACE_MEM_Stream::recv_n (void *buf,
+ size_t len,
+ const ACE_Time_Value *timeout) const
+{
+ ACE_TRACE ("ACE_MEM_Stream::recv_n");
+ return ACE::recv_n (this->get_handle (),
+ buf,
+ len,
+ timeout);
+}
+
+ASYS_INLINE ssize_t
+ACE_MEM_Stream::recvv_n (iovec iov[],
+ size_t n,
+ const ACE_Time_Value *timeout) const
+{
+ ACE_TRACE ("ACE_MEM_Stream::recvv_n");
+ return ACE::recvv_n (this->get_handle (),
+ iov,
+ n,
+ timeout);
+}
+
+ASYS_INLINE ssize_t
+ACE_MEM_Stream::send_n (const void *buf,
+ size_t len,
+ int flags,
+ const ACE_Time_Value *timeout) const
+{
+ ACE_TRACE ("ACE_MEM_Stream::send_n");
+ return ACE::send_n (this->get_handle (),
+ buf,
+ len,
+ flags,
+ timeout);
+}
+
+ASYS_INLINE ssize_t
+ACE_MEM_Stream::send_n (const void *buf,
+ size_t len,
+ const ACE_Time_Value *timeout) const
+{
+ ACE_TRACE ("ACE_MEM_Stream::send_n");
+ return ACE::send_n (this->get_handle (),
+ buf,
+ len,
+ timeout);
+}
+
+ASYS_INLINE ssize_t
+ACE_MEM_Stream::sendv_n (iovec iov[],
+ size_t n,
+ const ACE_Time_Value *timeout) const
+{
+ ACE_TRACE ("ACE_MEM_Stream::sendv_n");
+ return ACE::sendv_n (this->get_handle (),
+ iov,
+ n,
+ timeout);
+}
+
+ASYS_INLINE ssize_t
+ACE_MEM_Stream::send_urg (const void *ptr,
+ size_t len,
+ const ACE_Time_Value *timeout) const
+{
+ ACE_TRACE ("ACE_MEM_Stream::send_urg");
+ return ACE::send (this->get_handle (),
+ ptr,
+ len,
+ MSG_OOB,
+ timeout);
+}
+
+ASYS_INLINE ssize_t
+ACE_MEM_Stream::recv_urg (void *ptr,
+ size_t len,
+ const ACE_Time_Value *timeout) const
+{
+ ACE_TRACE ("ACE_MEM_Stream::recv_urg");
+ return ACE::recv (this->get_handle (),
+ ptr,
+ len,
+ MSG_OOB,
+ timeout);
+}
+#endif /* 0 */