summaryrefslogtreecommitdiff
path: root/ace/ACE.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ace/ACE.cpp')
-rw-r--r--ace/ACE.cpp201
1 files changed, 95 insertions, 106 deletions
diff --git a/ace/ACE.cpp b/ace/ACE.cpp
index 5b96172d8e6..4b1f9cb1dc5 100644
--- a/ace/ACE.cpp
+++ b/ace/ACE.cpp
@@ -6,7 +6,6 @@
#include "ace/Auto_Ptr.h"
#include "ace/INET_Addr.h"
#include "ace/Object_Manager.h"
-#include "ace/SString.h"
#include "ace/Version.h"
#if defined (ACE_LACKS_INLINE_FUNCTIONS)
@@ -15,9 +14,6 @@
ACE_RCSID(ace, ACE, "$Id$")
-// Static data members.
-u_int ACE::init_fini_count_ = 0;
-
// Keeps track of whether we're in some global debug mode.
char ACE::debug_ = 0;
@@ -30,36 +26,16 @@ size_t ACE::pagesize_ = 0;
// Size of allocation granularity.
size_t ACE::allocation_granularity_ = 0;
-
int
ACE::init (void)
{
- // Don't use ACE_TRACE, because Object_Manager might not have been
- // instantiated yet.
- // ACE_TRACE ("ACE::init");
-
- ++init_fini_count_;
-
- return ACE_Object_Manager::instance ()->init ();
+ return ACE_Object_Manager::instance()->init ();
}
int
ACE::fini (void)
{
- ACE_TRACE ("ACE::fini");
-
- if (init_fini_count_ > 0)
- {
- if (--init_fini_count_ == 0)
- return ACE_Object_Manager::instance ()->fini ();
- else
- // Wait for remaining fini () calls.
- return 1;
- }
- else
- // More ACE::fini () calls than ACE::init () calls. Bad
- // application!
- return -1;
+ return ACE_Object_Manager::instance()->fini ();
}
u_int
@@ -1077,6 +1053,30 @@ ACE::recv (ACE_HANDLE handle, size_t n, ...)
// Miscellaneous static methods used throughout ACE.
ssize_t
+ACE::send_n (ACE_HANDLE handle, const void *buf, size_t len)
+{
+ ACE_TRACE ("ACE::send_n");
+ size_t bytes_written;
+ ssize_t n;
+
+ for (bytes_written = 0; bytes_written < len; bytes_written += n)
+ {
+ n = ACE::send (handle,
+ (const char *) buf + bytes_written,
+ len - bytes_written);
+ if (n == -1)
+ {
+ if (errno == EWOULDBLOCK)
+ n = 0; // Keep trying to send.
+ else
+ return -1;
+ }
+ }
+
+ return bytes_written;
+}
+
+ssize_t
ACE::send_n (ACE_HANDLE handle,
const void *buf,
size_t len,
@@ -1104,6 +1104,35 @@ ACE::send_n (ACE_HANDLE handle,
return bytes_written;
}
+// Receive <len> bytes into <buf> from <handle> (uses the <write>
+// system call on UNIX and the <WriteFile> call on Win32).
+
+ssize_t
+ACE::write_n (ACE_HANDLE handle,
+ const void *buf,
+ size_t len)
+{
+ ACE_TRACE ("ACE::write_n");
+
+ size_t bytes_written;
+ ssize_t n;
+
+ for (bytes_written = 0; bytes_written < len; bytes_written += n)
+ {
+ n = ACE_OS::write (handle, (const char *) buf + bytes_written,
+ len - bytes_written);
+ if (n == -1)
+ {
+ if (errno == EWOULDBLOCK)
+ n = 0; // Keep trying to send.
+ else
+ return -1;
+ }
+ }
+
+ return bytes_written;
+}
+
ssize_t
ACE::recv_n (ACE_HANDLE handle, void *buf, size_t len)
{
@@ -1158,6 +1187,39 @@ ACE::recv_n (ACE_HANDLE handle, void *buf, size_t len, int flags)
return bytes_read;
}
+// Receive <len> bytes into <buf> from <handle> (uses the <read>
+// system call on UNIX and the <ReadFile> call on Win32).
+
+ssize_t
+ACE::read_n (ACE_HANDLE handle,
+ void *buf,
+ size_t len)
+{
+ ACE_TRACE ("ACE::read_n");
+
+ size_t bytes_read;
+ ssize_t n;
+
+ for (bytes_read = 0; bytes_read < len; bytes_read += n)
+ {
+ n = ACE_OS::read (handle,
+ (char *) buf + bytes_read,
+ len - bytes_read);
+
+ if (n == -1)
+ {
+ if (errno == EWOULDBLOCK)
+ n = 0; // Keep trying to read.
+ else
+ return -1;
+ }
+ else if (n == 0)
+ break;
+ }
+
+ return bytes_read;
+}
+
int
ACE::enter_recv_timedwait (ACE_HANDLE handle,
const ACE_Time_Value *timeout,
@@ -1169,17 +1231,6 @@ ACE::enter_recv_timedwait (ACE_HANDLE handle,
if (timeout == 0)
return 0;
-#if defined (ACE_HAS_POLL) && defined (ACE_HAS_LIMITED_SELECT)
-
- struct pollfd fds;
-
- fds.fd = handle;
- fds.events = POLLIN;
- fds.revents = 0;
-
- int a = ACE_OS::poll (&fds, 1, *timeout);
-
-#else
ACE_Handle_Set handle_set;
handle_set.set_bit (handle);
@@ -1189,8 +1240,6 @@ ACE::enter_recv_timedwait (ACE_HANDLE handle,
(fd_set *) 0, // write_fds.
(fd_set *) 0, // exception_fds.
timeout);
-#endif /* ACE_HAS_POLL && ACE_HAS_LIMITED_SELECT */
-
switch ( a )
{
case 0: // Timer expired. return -1
@@ -1246,17 +1295,6 @@ ACE::enter_send_timedwait (ACE_HANDLE handle,
if (timeout==0)
return 0;
-#if defined (ACE_HAS_POLL) && defined (ACE_HAS_LIMITED_SELECT)
-
- struct pollfd fds;
-
- fds.fd = handle;
- fds.events = POLLOUT;
- fds.revents = 0;
-
- int a = ACE_OS::poll (&fds, 1, *timeout);
-
-#else
ACE_Handle_Set handle_set;
handle_set.set_bit (handle);
@@ -1269,8 +1307,6 @@ ACE::enter_send_timedwait (ACE_HANDLE handle,
(fd_set *) handle_set,
(fd_set *) 0,
timeout);
-#endif /* ACE_HAS_POLL && ACE_HAS_LIMITED_SELECT */
-
switch ( a )
{
case 0: // Timer expired.
@@ -1678,29 +1714,16 @@ ACE::handle_timed_complete (ACE_HANDLE h,
int is_tli)
{
ACE_TRACE ("ACE::handle_timed_complete");
-
-#if !defined (ACE_WIN32) && defined (ACE_HAS_POLL) && defined (ACE_HAS_LIMITED_SELECT)
-
- struct pollfd fds;
-
- fds.fd = h;
- fds.events = POLLIN | POLLOUT;
- fds.revents = 0;
-
-#else
ACE_Handle_Set rd_handles;
ACE_Handle_Set wr_handles;
-
- rd_handles.set_bit (h);
- wr_handles.set_bit (h);
-#endif /* !ACE_WIN32 && ACE_HAS_POLL && ACE_HAS_LIMITED_SELECT */
+ int need_to_check;
#if defined (ACE_WIN32)
ACE_Handle_Set ex_handles;
ex_handles.set_bit (h);
#endif /* ACE_WIN32 */
-
- int need_to_check;
+ rd_handles.set_bit (h);
+ wr_handles.set_bit (h);
#if defined (ACE_WIN32)
int n = ACE_OS::select (int (h) + 1,
@@ -1709,17 +1732,11 @@ ACE::handle_timed_complete (ACE_HANDLE h,
ex_handles,
timeout);
#else
-# if defined (ACE_HAS_POLL) && defined (ACE_HAS_LIMITED_SELECT)
-
- int n = ACE_OS::poll (&fds, 1, timeout);
-
-# else
int n = ACE_OS::select (int (h) + 1,
rd_handles,
wr_handles,
0,
timeout);
-# endif /* ACE_HAS_POLL && ACE_HAS_LIMITED_SELECT */
#endif /* ACE_WIN32 */
// If we failed to connect within the time period allocated by the
@@ -1746,24 +1763,14 @@ ACE::handle_timed_complete (ACE_HANDLE h,
need_to_check = 1;
#else
if (is_tli)
-
-# if defined (ACE_HAS_POLL) && defined (ACE_HAS_LIMITED_SELECT)
- need_to_check = (fds.revents & POLLIN) && !(fds.revents & POLLOUT);
-# else
need_to_check = rd_handles.is_set (h) && !wr_handles.is_set (h);
-# endif /* ACE_HAS_POLL && ACE_HAS_LIMITED_SELECT */
-
else
#if defined(AIX)
// AIX is broken... both success and failed connect will set the
// write handle only, so always check.
need_to_check = 1;
#else
-# if defined (ACE_HAS_POLL) && defined (ACE_HAS_LIMITED_SELECT)
- need_to_check = (fds.revents & POLLIN);
-# else
need_to_check = rd_handles.is_set (h);
-# endif /* ACE_HAS_POLL && ACE_HAS_LIMITED_SELECT */
#endif /* AIX */
#endif /* ACE_WIN32 */
@@ -1835,35 +1842,17 @@ ACE::handle_timed_accept (ACE_HANDLE listener,
if (listener == ACE_INVALID_HANDLE)
return -1;
-#if defined (ACE_HAS_POLL) && defined (ACE_HAS_LIMITED_SELECT)
-
- struct pollfd fds;
-
- fds.fd = listener;
- fds.events = POLLIN;
- fds.revents = 0;
-
-#else
// Use the select() implementation rather than poll().
ACE_Handle_Set rd_handle;
rd_handle.set_bit (listener);
-#endif /* ACE_HAS_POLL && ACE_HAS_LIMITED_SELECT */
// We need a loop here if <restart> is enabled.
for (;;)
{
-#if defined (ACE_HAS_POLL) && defined (ACE_HAS_LIMITED_SELECT)
-
- int n = ACE_OS::poll (&fds, 1, timeout);
-
-#else
- int n = ACE_OS::select (int (listener) + 1,
+ switch (ACE_OS::select (int (listener) + 1,
rd_handle, 0, 0,
- timeout);
-#endif /* ACE_HAS_POLL && ACE_HAS_LIMITED_SELECT */
-
- switch (n)
+ timeout))
{
case -1:
if (errno == EINTR && restart)
@@ -2157,7 +2146,7 @@ int
ACE::set_flags (ACE_HANDLE handle, int flags)
{
ACE_TRACE ("ACE::set_flags");
-#if defined (ACE_WIN32) || defined (VXWORKS) || defined (ACE_LACKS_FCNTL)
+#if defined (ACE_WIN32) || defined (ACE_LACKS_FCNTL)
switch (flags)
{
case ACE_NONBLOCK:
@@ -2193,7 +2182,7 @@ ACE::clr_flags (ACE_HANDLE handle, int flags)
{
ACE_TRACE ("ACE::clr_flags");
-#if defined (ACE_WIN32) || defined (VXWORKS) || defined (ACE_LACKS_FCNTL)
+#if defined (ACE_WIN32) || defined (ACE_LACKS_FCNTL)
switch (flags)
{
case ACE_NONBLOCK: