diff options
Diffstat (limited to 'ace/SPIPE_Connector.cpp')
-rw-r--r-- | ace/SPIPE_Connector.cpp | 68 |
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; +} |