summaryrefslogtreecommitdiff
path: root/ACE/ace/Handle_Ops.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/ace/Handle_Ops.cpp')
-rw-r--r--ACE/ace/Handle_Ops.cpp50
1 files changed, 50 insertions, 0 deletions
diff --git a/ACE/ace/Handle_Ops.cpp b/ACE/ace/Handle_Ops.cpp
new file mode 100644
index 00000000000..eae24314864
--- /dev/null
+++ b/ACE/ace/Handle_Ops.cpp
@@ -0,0 +1,50 @@
+// $Id$
+
+#include "ace/Handle_Ops.h"
+
+#include "ace/OS_NS_errno.h"
+#include "ace/OS_NS_fcntl.h"
+#include "ace/Time_Value.h"
+
+ACE_RCSID (ace,
+ Handle_Ops,
+ "$Id$")
+
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+
+ACE_HANDLE
+ACE::handle_timed_open (ACE_Time_Value *timeout,
+ const ACE_TCHAR *name,
+ int flags,
+ int perms,
+ LPSECURITY_ATTRIBUTES sa)
+{
+ ACE_TRACE ("ACE::handle_timed_open");
+
+ if (timeout != 0)
+ {
+#if !defined (ACE_WIN32)
+ // On Win32, ACE_NONBLOCK gets recognized as O_WRONLY so we
+ // don't use it there
+ flags |= ACE_NONBLOCK;
+#endif /* ACE_WIN32 */
+
+ // Open the named pipe or file using non-blocking mode...
+ ACE_HANDLE handle = ACE_OS::open (name,
+ flags,
+ perms,
+ sa);
+ if (handle == ACE_INVALID_HANDLE
+ && (errno == EWOULDBLOCK
+ && (timeout->sec () > 0 || timeout->usec () > 0)))
+ // This expression checks if we were polling.
+ errno = ETIMEDOUT;
+
+ return handle;
+ }
+ else
+ return ACE_OS::open (name, flags, perms, sa);
+}
+
+ACE_END_VERSIONED_NAMESPACE_DECL