summaryrefslogtreecommitdiff
path: root/ACE/ace/SPIPE_Acceptor.h
diff options
context:
space:
mode:
authorWilliam R. Otte <wotte@dre.vanderbilt.edu>2006-07-24 15:50:30 +0000
committerWilliam R. Otte <wotte@dre.vanderbilt.edu>2006-07-24 15:50:30 +0000
commitc44379cc7d9c7aa113989237ab0f56db12aa5219 (patch)
tree66a84b20d47f2269d8bdc6e0323f338763424d3a /ACE/ace/SPIPE_Acceptor.h
parent3aff90f4a822fcf5d902bbfbcc9fa931d6191a8c (diff)
downloadATCD-c44379cc7d9c7aa113989237ab0f56db12aa5219.tar.gz
Repo restructuring
Diffstat (limited to 'ACE/ace/SPIPE_Acceptor.h')
-rw-r--r--ACE/ace/SPIPE_Acceptor.h168
1 files changed, 168 insertions, 0 deletions
diff --git a/ACE/ace/SPIPE_Acceptor.h b/ACE/ace/SPIPE_Acceptor.h
new file mode 100644
index 00000000000..6e0bb7ed8aa
--- /dev/null
+++ b/ACE/ace/SPIPE_Acceptor.h
@@ -0,0 +1,168 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file SPIPE_Acceptor.h
+ *
+ * $Id$
+ *
+ * @author Douglas C. Schmidt <schmidt@cs.wustl.edu>
+ * @author Prashant Jain <pjain@cs.wustl.edu>
+ */
+//=============================================================================
+
+
+#ifndef ACE_SPIPE_ACCEPTOR_H
+#define ACE_SPIPE_ACCEPTOR_H
+#include /**/ "ace/pre.h"
+
+#include "ace/SPIPE_Stream.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#if (defined (ACE_WIN32) && defined (ACE_HAS_WINNT4) && (ACE_HAS_WINNT4 != 0))
+#include "ace/Manual_Event.h"
+#endif /* ACE_WIN32 */
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+
+/**
+ * @class ACE_SPIPE_Acceptor
+ *
+ * @brief A factory class that produces ACE_SPIPE_Stream objects.
+ *
+ * ACE_SPIPE_Acceptor is a factory class that accepts SPIPE connections.
+ * Each accepted connection produces an ACE_SPIPE_Stream object.
+ *
+ * @warning Windows: Works only on Windows NT 4 and higher. To use this
+ * class with the ACE_Reactor framework, note that the handle to
+ * demultiplex on is an event handle and should be registered with the
+ * ACE_Reactor::register_handler (ACE_Event_Handler *, ACE_HANDLE) method.
+ *
+ * @warning Works on non-Windows platforms only when @c ACE_HAS_STREAM_PIPES
+ * is defined.
+ *
+ */
+class ACE_Export ACE_SPIPE_Acceptor : public ACE_SPIPE
+{
+public:
+ // = Initialization and termination methods.
+ /// Default constructor.
+ ACE_SPIPE_Acceptor (void);
+
+ /// Initiate a passive-mode STREAM pipe listener.
+ /**
+ * @param local_sap The name of the pipe instance to open and listen on.
+ * @param reuse_addr Optional, and ignored. Needed for API compatibility
+ * with other acceptor classes.
+ * @param perms Optional, the protection mask to create the pipe
+ * with. Ignored on Windows.
+ * @param sa Optional, ignored on non-Windows. The
+ * SECURITY_ATTRIBUTES to create the named pipe
+ * instances with. This pointer is remembered and
+ * reused on each new named pipe instance, so only
+ * pass a value that remains valid as long as this
+ * object does.
+ * @param pipe_mode Optional, ignored on non-Windows. The NT pipe
+ * mode used when creating the pipe.
+ */
+ ACE_SPIPE_Acceptor (const ACE_SPIPE_Addr &local_sap,
+ int reuse_addr = 1,
+ int perms = ACE_DEFAULT_FILE_PERMS,
+ LPSECURITY_ATTRIBUTES sa = 0,
+ int pipe_mode = PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE);
+
+ /// Initiate a passive-mode STREAM pipe listener.
+ /**
+ * @param local_sap The name of the pipe instance to open and listen on.
+ * @param reuse_addr Optional, and ignored. Needed for API compatibility
+ * with other acceptor classes.
+ * @param perms Optional, the protection mask to create the pipe
+ * with. Ignored on Windows.
+ * @param sa Optional, ignored on non-Windows. The
+ * SECURITY_ATTRIBUTES to create the named pipe
+ * instances with. This pointer is remembered and
+ * reused on each new named pipe instance, so only
+ * pass a value that remains valid as long as this
+ * object does.
+ * @param pipe_mode Optional, ignored on non-Windows. The NT pipe
+ * mode used when creating the pipe.
+ *
+ * @retval 0 for success.
+ * @retval -1 for failure.
+ */
+ int open (const ACE_SPIPE_Addr &local_sap,
+ int reuse_addr = 1,
+ int perms = ACE_DEFAULT_FILE_PERMS,
+ LPSECURITY_ATTRIBUTES sa = 0,
+ int pipe_mode = PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE);
+
+ /// Close down the passive-mode STREAM pipe listener.
+ int close (void);
+
+ /// Remove the underlying mounted pipe from the file system.
+ int remove (void);
+
+ // = Passive connection acceptance method.
+ /**
+ * Accept a new data transfer connection.
+ *
+ * @param ipc_sap_spipe The ACE_SPIPE_Stream to initialize with the
+ * newly-accepted pipe.
+ * @param remote_addr Optional, accepts the address of the peer.
+ * @param timeout 0 means block forever, {0, 0} means poll.
+ * @param restart 1 means "restart if interrupted."
+ *
+ * @retval 0 for success.
+ * @retval -1 for failure.
+ */
+ int accept (ACE_SPIPE_Stream &ipc_sap_spipe,
+ ACE_SPIPE_Addr *remote_addr = 0,
+ ACE_Time_Value *timeout = 0,
+ int restart = 1,
+ int reset_new_handle = 0);
+
+ // = Meta-type info
+ typedef ACE_SPIPE_Addr PEER_ADDR;
+ typedef ACE_SPIPE_Stream PEER_STREAM;
+
+ /// Dump the state of an object.
+ void dump (void) const;
+
+ /// Declare the dynamic allocation hooks.
+ ACE_ALLOC_HOOK_DECLARE;
+
+private:
+ /// Create a new instance of an SPIPE.
+ int create_new_instance (int perms = 0);
+
+#if (defined (ACE_WIN32) && defined (ACE_HAS_WINNT4) && (ACE_HAS_WINNT4 != 0))
+ // On Windows, the SECURITY_ATTRIBUTES specified for the initial accept
+ // operation is reused on all subsequent pipe instances as well.
+ LPSECURITY_ATTRIBUTES sa_;
+
+ // On Windows, the pipe mode to create the pipe in. This can be in
+ // either a bytestream-oriented mode or a message-oriented mode.
+ DWORD pipe_mode_;
+
+ // On Windows, the handle maintained in the ACE_IPC_SAP class is the
+ // event handle from event_. The pipe handle is useless for telling
+ // when a pipe connect is done/ready, and it changes on each pipe
+ // acceptance, quite unlike other acceptor-type classes in ACE.
+ // This allows the get_handle()-obtained handle to be used for
+ // registering with the reactor (albeit for signal, not input)
+ // to tell when a pipe accept is done.
+ ACE_OVERLAPPED overlapped_;
+ ACE_Manual_Event event_;
+ ACE_HANDLE pipe_handle_;
+ int already_connected_;
+#endif /* ACE_WIN32 */
+
+};
+
+ACE_END_VERSIONED_NAMESPACE_DECL
+
+#include /**/ "ace/post.h"
+#endif /* ACE_SPIPE_ACCEPTOR_H */