summaryrefslogtreecommitdiff
path: root/ace/IPC_SAP.cpp
diff options
context:
space:
mode:
authorlevine <levine@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1996-10-21 21:41:34 +0000
committerlevine <levine@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1996-10-21 21:41:34 +0000
commita5fdebc5f6375078ec1763850a4ca23ec7fe6458 (patch)
treebcf0a25c3d45a209a6e3ac37b233a4812f29c732 /ace/IPC_SAP.cpp
downloadATCD-a5fdebc5f6375078ec1763850a4ca23ec7fe6458.tar.gz
Initial revision
Diffstat (limited to 'ace/IPC_SAP.cpp')
-rw-r--r--ace/IPC_SAP.cpp148
1 files changed, 148 insertions, 0 deletions
diff --git a/ace/IPC_SAP.cpp b/ace/IPC_SAP.cpp
new file mode 100644
index 00000000000..74d914d1c4f
--- /dev/null
+++ b/ace/IPC_SAP.cpp
@@ -0,0 +1,148 @@
+// IPC_SAP.cpp
+// $Id$
+
+#define ACE_BUILD_DLL
+#include "ace/Log_Msg.h"
+#include "ace/IPC_SAP.h"
+
+ACE_ALLOC_HOOK_DEFINE(ACE_IPC_SAP)
+
+void
+ACE_IPC_SAP::dump (void) const
+{
+ ACE_TRACE ("ACE_IPC_SAP::dump");
+
+ ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this));
+ ACE_DEBUG ((LM_DEBUG, "handle_ = %d", this->handle_));
+ ACE_DEBUG ((LM_DEBUG, "\npid_ = %d", this->pid_));
+ ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP));
+}
+
+// Cache for the process ID.
+pid_t ACE_IPC_SAP::pid_ = 0;
+
+// This is the do-nothing constructor. It does not perform a
+// ACE_OS::socket system call.
+
+ACE_IPC_SAP::ACE_IPC_SAP (void)
+ : handle_ (ACE_INVALID_HANDLE)
+{
+// ACE_TRACE ("ACE_IPC_SAP::ACE_IPC_SAP");
+}
+
+// Make the HANDLE_ available for asynchronous I/O (SIGIO), urgent
+// data (SIGURG), or non-blocking I/O (ACE_NONBLOCK).
+
+int
+ACE_IPC_SAP::enable (int signum) const
+{
+ ACE_TRACE ("ACE_IPC_SAP::enable");
+
+ // First-time in initialization.
+ if (ACE_IPC_SAP::pid_ == 0)
+ ACE_IPC_SAP::pid_ = ACE_OS::getpid ();
+
+#if defined(ACE_WIN32)
+ switch (signum)
+ {
+ case ACE_NONBLOCK:
+ // nonblocking argument (1)
+ // blocking: (0)
+ {
+ u_long nonblock = 1;
+ return ACE_OS::ioctl (this->handle_, FIONBIO, &nonblock);
+ }
+ default:
+ errno = ENOTSUP;
+ return -1;
+ }
+#else
+ switch (signum)
+ {
+#if defined (SIGURG)
+ case SIGURG:
+#if defined (F_SETOWN)
+ if (ACE_OS::fcntl (this->handle_, F_SETOWN, ACE_IPC_SAP::pid_) < 0)
+ return -1;
+#else
+ return -1;
+#endif /* F_SETOWN */
+ break;
+#endif /* SIGURG */
+ case SIGIO:
+#if defined (F_SETOWN) && defined (FASYNC)
+ if (ACE_OS::fcntl (this->handle_, F_SETOWN, ACE_IPC_SAP::pid_) == -1)
+ return -1;
+ if (ACE::set_flags (this->handle_, FASYNC) == -1)
+ return -1;
+#else
+ return -1;
+#endif /* F_SETOWN && FASYNC */
+ break;
+ case ACE_NONBLOCK:
+ if (ACE::set_flags (this->handle_, ACE_NONBLOCK) == ACE_INVALID_HANDLE)
+ return -1;
+ break;
+ default:
+ return -1;
+ }
+#endif /* !ACE_WIN32 */
+ return 0;
+}
+
+// Restore the IPC_SAPet by turning off synchronous I/O or urgent
+// delivery.
+
+int
+ACE_IPC_SAP::disable (int signum) const
+{
+ ACE_TRACE ("ACE_IPC_SAP::disable");
+
+#if defined(ACE_WIN32)
+ switch (signum)
+ {
+ case ACE_NONBLOCK:
+ // nonblocking argument (1)
+ // blocking: (0)
+ {
+ u_long nonblock = 0;
+ return ACE_OS::ioctl (this->handle_, FIONBIO, &nonblock);
+ }
+ default:
+ errno = ENOTSUP;
+ return -1;
+ }
+#else
+ switch (signum)
+ {
+#if defined (SIGURG)
+ case SIGURG:
+#if defined (F_SETOWN)
+ if (ACE_OS::fcntl (this->handle_, F_SETOWN, 0) == -1)
+ return -1;
+ break;
+#else
+ return -1;
+#endif /* F_SETOWN */
+#endif /* SIGURG */
+ case SIGIO:
+#if defined (F_SETOWN) && defined (FASYNC)
+ if (ACE_OS::fcntl (this->handle_, F_SETOWN, 0) == -1)
+ return -1;
+ if (ACE::clr_flags (this->handle_, FASYNC) == -1)
+ return -1;
+ break;
+#else
+ return -1;
+#endif /* F_SETOWN && FASYNC */
+ case ACE_NONBLOCK:
+ if (ACE::clr_flags (this->handle_, ACE_NONBLOCK) == -1)
+ return -1;
+ break;
+ default:
+ return -1;
+ }
+#endif /* !ACE_WIN32 */
+ return 0;
+}
+