summaryrefslogtreecommitdiff
path: root/ace/SPIPE_Connector.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ace/SPIPE_Connector.cpp')
-rw-r--r--ace/SPIPE_Connector.cpp68
1 files changed, 68 insertions, 0 deletions
diff --git a/ace/SPIPE_Connector.cpp b/ace/SPIPE_Connector.cpp
new file mode 100644
index 00000000000..5d8a7e34f5f
--- /dev/null
+++ b/ace/SPIPE_Connector.cpp
@@ -0,0 +1,68 @@
+// SPIPE_Connector.cpp
+// $Id$
+
+#define ACE_BUILD_DLL
+#include "ace/SPIPE_Connector.h"
+
+ACE_ALLOC_HOOK_DEFINE(ACE_SPIPE_Connector)
+
+// Creates a Local ACE_SPIPE.
+
+ACE_SPIPE_Connector::ACE_SPIPE_Connector (ACE_SPIPE_Stream &new_io,
+ const ACE_SPIPE_Addr &remote_sap,
+ ACE_Time_Value *timeout,
+ const ACE_Addr &local_sap,
+ int reuse_addr,
+ int flags,
+ int perms)
+{
+ ACE_TRACE ("ACE_SPIPE_Connector::ACE_SPIPE_Connector");
+ if (this->connect (new_io, remote_sap, timeout, local_sap,
+ reuse_addr, flags, perms) == -1
+ && timeout != 0 && !(errno == EWOULDBLOCK || errno == ETIMEDOUT))
+ ACE_ERROR ((LM_ERROR, "address %s, %p\n",
+ remote_sap.get_path_name (), "ACE_SPIPE_Connector"));
+}
+
+void
+ACE_SPIPE_Connector::dump (void) const
+{
+ ACE_TRACE ("ACE_SPIPE_Connector::dump");
+}
+
+ACE_SPIPE_Connector::ACE_SPIPE_Connector (void)
+{
+ ACE_TRACE ("ACE_SPIPE_Connector::ACE_SPIPE_Connector");
+}
+
+int
+ACE_SPIPE_Connector::connect (ACE_SPIPE_Stream &new_io,
+ const ACE_SPIPE_Addr &remote_sap,
+ ACE_Time_Value *timeout,
+ const ACE_Addr &local_sap,
+ int reuse_addr,
+ int flags,
+ int perms)
+{
+ ACE_TRACE ("ACE_SPIPE_Connector::connect");
+
+ // Make darn sure that the O_CREAT flag is not set!
+ ACE_CLR_BITS (flags, O_CREAT);
+ ACE_HANDLE handle = ACE::handle_timed_open (timeout,
+ remote_sap.get_path_name (),
+ flags, perms);
+ new_io.set_handle (handle);
+ new_io.remote_addr_ = remote_sap; // class copy.
+
+#if defined (ACE_WIN32)
+ DWORD pipe_mode = PIPE_READMODE_MESSAGE | PIPE_WAIT;
+
+ // Set named pipe mode and buffering characteristics.
+ if (handle != ACE_INVALID_HANDLE)
+ return ::SetNamedPipeHandleState (handle,
+ &pipe_mode,
+ NULL,
+ NULL);
+#endif
+ return handle == ACE_INVALID_HANDLE ? -1 : 0;
+}