summaryrefslogtreecommitdiff
path: root/ace/SPIPE_Acceptor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ace/SPIPE_Acceptor.cpp')
-rw-r--r--ace/SPIPE_Acceptor.cpp247
1 files changed, 0 insertions, 247 deletions
diff --git a/ace/SPIPE_Acceptor.cpp b/ace/SPIPE_Acceptor.cpp
deleted file mode 100644
index 9612f2fa504..00000000000
--- a/ace/SPIPE_Acceptor.cpp
+++ /dev/null
@@ -1,247 +0,0 @@
-// SPIPE_Acceptor.cpp
-// $Id$
-
-#define ACE_BUILD_DLL
-#include "ace/SPIPE_Acceptor.h"
-
-ACE_RCSID(ace, SPIPE_Acceptor, "$Id$")
-
-ACE_SPIPE_Acceptor::ACE_SPIPE_Acceptor (void)
-{
- ACE_TRACE ("ACE_SPIPE_Acceptor::ACE_SPIPE_Acceptor");
-}
-
-int
-ACE_SPIPE_Acceptor::remove (void)
-{
- ACE_TRACE ("ACE_SPIPE_Acceptor::remove");
-#if defined (ACE_HAS_STREAM_PIPES)
- int result = this->close ();
-
- // Remove the underlying file.
- return ACE_OS::unlink (this->local_addr_.get_path_name ()) == -1
- || result == -1 ? -1 : 0;
-#else
- this->close ();
- return 0;
-#endif
-}
-
-ACE_ALLOC_HOOK_DEFINE(ACE_SPIPE_Acceptor)
-
-void
-ACE_SPIPE_Acceptor::dump (void) const
-{
- ACE_TRACE ("ACE_SPIPE_Acceptor::dump");
-}
-
-// General purpose routine for performing server ACE_SPIPE creation.
-
-int
-ACE_SPIPE_Acceptor::open (const ACE_SPIPE_Addr &local_sap,
- int /* reuse_addr */,
- int perms)
-{
- ACE_TRACE ("ACE_SPIPE_Acceptor::open");
-
- this->local_addr_ = local_sap;
- this->set_handle (ACE_INVALID_HANDLE);
-
- return this->create_new_instance (perms);
-}
-
-int
-ACE_SPIPE_Acceptor::create_new_instance (int perms)
-{
-#if defined (ACE_HAS_STREAM_PIPES)
- ACE_HANDLE spipe[2];
- char module[] = "connld";
-
- ACE_HANDLE handle = ACE_OS::creat (this->local_addr_.get_path_name (),
- perms);
- if (handle == ACE_INVALID_HANDLE)
- return -1;
- else if (ACE_OS::close (handle) == -1)
- return -1;
- else if (ACE_OS::pipe (spipe) == -1)
- return -1;
- else if (ACE_OS::ioctl (spipe[0],
- I_PUSH,
- module) == -1)
- return -1;
- else if (ACE_OS::fattach (spipe[0],
- this->local_addr_.get_path_name ()) == -1)
- return -1;
-
- this->set_handle (spipe[1]);
- return 0;
-
-#elif (defined (ACE_WIN32) && defined(ACE_HAS_WINNT4) && (ACE_HAS_WINNT4 != 0))
-
- // Create a new instance of the Named Pipe (WIN32). A new instance
- // of the named pipe must be created for every client process. If
- // an instance of the named pipe that is already connected to a
- // client process is reused with a new client process,
- // ::ConnectNamedPipe() would fail.
-
- ACE_UNUSED_ARG(perms);
- ACE_TRACE ("ACE_SPIPE_Acceptor::create_new_instance");
- int status;
-
- // Create a new instance of the named pipe
- ACE_HANDLE handle = ::CreateNamedPipe (this->local_addr_.get_path_name (),
- PIPE_ACCESS_DUPLEX |
- FILE_FLAG_OVERLAPPED,
- PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE,
- PIPE_UNLIMITED_INSTANCES,
- 1024 * 10,
- 1024 * 10,
- ACE_DEFAULT_TIMEOUT,
- NULL);
- if (handle == ACE_INVALID_HANDLE)
- {
- return -1;
- }
- else
- {
- // Start the Connect (analogous to listen() for a socket). Completion
- // is noted by the event being signalled. If a client connects
- // before this call, the error status will be ERROR_PIPE_CONNECTED, in
- // which case that fact is remembered via already_connected_ and noted
- // when the user calls accept().
- // Else the error status should be ERROR_IO_PENDING and the OS will
- // signal the event when it's done.
- this->already_connected_ = FALSE;
- this->set_handle (handle);
- this->overlapped_.hEvent = this->event_.handle();
- this->event_.reset();
-
- BOOL result = ::ConnectNamedPipe (handle, &this->overlapped_);
- ACE_ASSERT(result == FALSE);
- ACE_UNUSED_ARG (result);
-
- status = ::GetLastError();
- if (status == ERROR_PIPE_CONNECTED)
- this->already_connected_ = TRUE;
- else if (status != ERROR_IO_PENDING)
- this->close(); // Sets handle to ACE_INVALID_HANDLE
- }
- return (this->get_handle() == ACE_INVALID_HANDLE ? -1 : 0);
-#else
- ACE_UNUSED_ARG (perms);
- ACE_NOTSUP_RETURN (-1);
-#endif /* ACE_HAS_STREAM_PIPES */
-}
-
-int
-ACE_SPIPE_Acceptor::close (void)
-{
- ACE_TRACE ("ACE_SPIPE_Acceptor::close");
-
- // This behavior is shared by UNIX and Win32...
- int result = this->ACE_SPIPE::close ();
- this->set_handle (ACE_INVALID_HANDLE);
-
-#if defined (ACE_HAS_STREAM_PIPES)
- ACE_OS::fdetach (this->local_addr_.get_path_name ());
-#endif /* ACE_HAS_STREAM_PIPES */
- return result;
-}
-
-ACE_SPIPE_Acceptor::ACE_SPIPE_Acceptor (const ACE_SPIPE_Addr &local_sap,
- int reuse_addr,
- int perms)
-{
- ACE_TRACE ("ACE_SPIPE_Acceptor::ACE_SPIPE_Acceptor");
-
- if (this->open (local_sap, reuse_addr, perms) == -1)
- ACE_ERROR ((LM_ERROR, ASYS_TEXT ("%p\n"), ASYS_TEXT ("ACE_SPIPE_Acceptor")));
-}
-
-// General purpose routine for accepting new connections.
-
-int
-ACE_SPIPE_Acceptor::accept (ACE_SPIPE_Stream &new_io,
- ACE_SPIPE_Addr *remote_addr,
- ACE_Time_Value *timeout,
- int restart,
- int reset_new_handle)
-{
- ACE_TRACE ("ACE_SPIPE_Acceptor::accept");
- ACE_UNUSED_ARG (reset_new_handle);
-
-#if defined (ACE_HAS_STREAM_PIPES)
- strrecvfd r_handle;
-
- // Note that if THIS->MILLI_SECOND_DELAY == -1 we block on
- // ACE_OS::ioctl(). Otherwise, we will wait for the desired number
- // of milli seconds using ACE_OS::poll.
-
- if (timeout != 0 &&
- ACE::handle_timed_accept (this->get_handle (), timeout, restart) == -1)
- return -1;
- else if (ACE_OS::ioctl (this->get_handle (), I_RECVFD, &r_handle) == -1)
- return -1;
-
- new_io.set_handle (r_handle.fd);
- new_io.local_addr_ = this->local_addr_;
- new_io.remote_addr_.set_size (sizeof r_handle.gid + sizeof r_handle.uid);
- new_io.remote_addr_.group_id (r_handle.gid);
- new_io.remote_addr_.user_id (r_handle.uid);
-
- // This is for compatibility with ACE_SOCK_Acceptor and
- // ACE_TLI_Acceptor.
- if (remote_addr != 0)
- *remote_addr = new_io.remote_addr_;
-
- return 0;
-#elif (defined (ACE_WIN32) && defined(ACE_HAS_WINNT4) && (ACE_HAS_WINNT4 != 0))
- ACE_UNUSED_ARG (restart);
- ACE_UNUSED_ARG (remote_addr);
-
- // Check to see if we have a valid pipe
- if (this->get_handle () == ACE_INVALID_HANDLE)
- return -1;
-
- // open() started the Connect in asynchronous mode. Wait for the event
- // in the OVERLAPPED structure to be signalled, then grab the status.
- if (this->already_connected_ == FALSE)
- {
- if (timeout != 0)
- {
- ACE_Time_Value abstime (ACE_OS::gettimeofday() + *timeout);
- if (this->event_.wait (&abstime) == -1)
- return -1;
- }
- else
- if (this->event_.wait() == -1)
- return -1;
-
- // Should be here with the ConnectNamedPipe operation complete.
- // Steal the already_connected_ flag to record the results.
- DWORD unused;
- this->already_connected_ = ::GetOverlappedResult(this->get_handle(),
- &this->overlapped_,
- &unused,
- FALSE);
- }
-
- if (this->already_connected_)
- {
- new_io.set_handle (this->get_handle ());
- this->set_handle(ACE_INVALID_HANDLE);
- new_io.local_addr_ = this->local_addr_;
-
- // Create a new instance of the pipe for the next connection.
- this->create_new_instance ();
- return 0;
- }
- return -1;
-#else
- ACE_UNUSED_ARG (restart);
- ACE_UNUSED_ARG (timeout);
- ACE_UNUSED_ARG (remote_addr);
- ACE_UNUSED_ARG (new_io);
- ACE_NOTSUP_RETURN (-1);
-#endif /* ACE_HAS_STREAM_PIPES */
-}