summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorschmidt <douglascraigschmidt@users.noreply.github.com>1997-12-05 21:42:42 +0000
committerschmidt <douglascraigschmidt@users.noreply.github.com>1997-12-05 21:42:42 +0000
commitc8c55e76b7fb4b4532dc429deea911e83daeb1d9 (patch)
tree84d891b0412640d200334ce11406848dc5cb07b3 /examples
parent07e462372ca8ee7a66d5f7758ce4d844356b000d (diff)
downloadATCD-c8c55e76b7fb4b4532dc429deea911e83daeb1d9.tar.gz
*** empty log message ***
Diffstat (limited to 'examples')
-rw-r--r--examples/Reactor/Dgram/CODgram.cpp150
-rw-r--r--examples/Reactor/Dgram/Dgram.cpp17
2 files changed, 97 insertions, 70 deletions
diff --git a/examples/Reactor/Dgram/CODgram.cpp b/examples/Reactor/Dgram/CODgram.cpp
index 22d394ae4ab..8f0d71afba7 100644
--- a/examples/Reactor/Dgram/CODgram.cpp
+++ b/examples/Reactor/Dgram/CODgram.cpp
@@ -1,50 +1,47 @@
// $Id$
// Exercise the ACE_SOCK_CODgram wrapper along with the ACE_Reactor.
-//
-// Typical invocation sequence is:
-//
-// % CODgram 10000 localhost 10001 &
-// % CODgram 10001 localhost 10000
-//
-// This will start two interacting copies of the CODgram application.
+// This test simply ping-pongs datagrams back and forth between the
+// parent and child process.
#include "ace/Reactor.h"
#include "ace/SOCK_CODgram.h"
#include "ace/INET_Addr.h"
+static u_short port1;
+
class AAL_CP : public ACE_Event_Handler, public ACE_SOCK_CODgram
{
public:
- AAL_CP (const ACE_INET_Addr &remote_addr,
- const ACE_INET_Addr &local_addr);
+ AAL_CP (const ACE_INET_Addr &remote_addr,
+ const ACE_INET_Addr &local_addr);
- virtual int get_handle () const;
+ virtual ACE_HANDLE get_handle (void) const;
- virtual int handle_input (int fd);
+ virtual int handle_input (ACE_HANDLE handle);
virtual int handle_timeout (const ACE_Time_Value & tv,
const void *arg = 0);
};
-AAL_CP::AAL_CP (const ACE_INET_Addr &remote_addr,
- const ACE_INET_Addr &local_addr)
+AAL_CP::AAL_CP (const ACE_INET_Addr &remote_addr,
+ const ACE_INET_Addr &local_addr)
: ACE_SOCK_CODgram (remote_addr, local_addr)
{
}
-int
-AAL_CP::get_handle () const
+ACE_HANDLE
+AAL_CP::get_handle (void) const
{
return ACE_SOCK_CODgram::get_handle ();
}
int
-AAL_CP::handle_input (int)
+AAL_CP::handle_input (ACE_HANDLE)
{
char buf[BUFSIZ];
- ACE_DEBUG ((LM_DEBUG, "Activity occurred on handle %d!\n",
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t) activity occurred on handle %d!\n",
ACE_SOCK_CODgram::get_handle ()));
ssize_t n = ACE_SOCK_CODgram::recv (buf, sizeof buf);
@@ -52,7 +49,7 @@ AAL_CP::handle_input (int)
if (n == -1)
ACE_ERROR ((LM_ERROR, "%p\n", "handle_input"));
else
- ACE_DEBUG ((LM_DEBUG, "got buf = %*s\n", n, buf));
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t) buf of size %d = %*s\n", n, n, buf));
return 0;
}
@@ -60,64 +57,99 @@ AAL_CP::handle_input (int)
int
AAL_CP::handle_timeout (const ACE_Time_Value &, const void *)
{
- ACE_DEBUG ((LM_DEBUG, "timed out for aa1\n"));
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t) timed out for aa1\n"));
return 0;
}
-int main(int argc, char *argv[])
+static int
+run_test (u_short localport,
+ const char *remotehost,
+ u_short remoteport)
{
- // Estabish call backs, and socket names.
- if (argc != 4)
- ACE_ERROR_RETURN ((LM_ERROR,
- "usage: %s localport remotehost remoteport\n",
- argv[0]), -1);
+ ACE_INET_Addr remote_addr (remoteport,
+ remotehost);
+ ACE_INET_Addr local_addr (localport);
+
+ AAL_CP aal (remote_addr, local_addr);
+
+ // Read data from other side.
+ if (ACE_Reactor::instance ()->register_handler
+ (&aal, ACE_Event_Handler::READ_MASK) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "ACE_Reactor::register_handler"),
+ -1);
- ACE_Reactor reactor;
char buf[BUFSIZ];
- u_short localport = ACE_OS::atoi (argv[1]);
- u_short remoteport = ACE_OS::atoi (argv[3]);
- char *remotehost = argv[2];
+ ACE_OS::strcpy (buf, "Data to transmit");
+ size_t len = ACE_OS::strlen (buf);
- ACE_INET_Addr remote_addr (remoteport, remotehost);
- ACE_INET_Addr local_addr (localport);
+ if (localport == port1)
+ {
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t) sending data\n"));
+
+ for (size_t i = 0; i < 20; i++)
+ {
+ aal.send (buf, len);
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t) .\n"));
+ ACE_OS::sleep (1);
+ }
+ }
- AAL_CP aal (remote_addr, local_addr);
+ for (int i = 0; i < 40; i++)
+ {
+ // Wait up to 4 seconds for data.
+ ACE_Time_Value tv (4, 0);
- if (localport == 10000) // HACK
- {
- ACE_OS::memcpy (buf, "Data to transmit", sizeof buf);
- ACE_DEBUG ((LM_DEBUG, "sending data\n"));
+ if (ACE_Reactor::instance ()->handle_events (tv) <= 0)
+ ACE_ERROR_RETURN ((LM_DEBUG,
+ "(%P|%t) %p\n",
+ "handle_events"),
+ -1);
- for (int i = 0; i < 20; i++)
- {
- aal.send (buf, sizeof buf);
- ACE_DEBUG ((LM_DEBUG, ".\n"));
- ACE_OS::sleep (1);
- }
- }
+ ACE_DEBUG ((LM_DEBUG,
+ "(%P|%t) return from handle events\n"));
- // Read data from other side.
- if (reactor.register_handler (&aal, ACE_Event_Handler::READ_MASK) == -1)
- ACE_ERROR_RETURN ((LM_ERROR, "ACE_Reactor::register_handler"), -1);
+ aal.send (buf, len);
+
+ ACE_DEBUG ((LM_DEBUG,
+ "(%P|%t) .\n"));
+ }
- if (reactor.schedule_timer (&aal, 0,
- ACE_Time_Value (1, 0),
- ACE_Time_Value (0, 3500000)) == -1)
- ACE_ERROR_RETURN ((LM_ERROR, "ACE_Reactor::schedule_timer"), -1);
+ if (ACE_Reactor::instance ()->remove_handler
+ (&aal, ACE_Event_Handler::READ_MASK) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "ACE_Reactor::remove_handler"),
+ -1);
- ACE_OS::memcpy (buf, "Data to transmit", sizeof buf);
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t) exiting\n"));
+}
- for (;;)
+int
+main (int argc, char *argv[])
+{
+ // Estabish call backs and socket names.
+
+ port1 = argc > 1 ? ACE_OS::atoi (argv[1]) : ACE_DEFAULT_SERVER_PORT;
+ const char *remotehost = argc > 2 ? argv[2] : ACE_DEFAULT_SERVER_HOST;
+ const u_short port2 = argc > 3 ? ACE_OS::atoi (argv[3]) : port1 + 1;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "(%P|%t) local port = %d, remote host = %s, remote port = %d\n",
+ port1, remotehost, port2));
+
+ switch (ACE_OS::fork (argv[0]))
{
- // Wait at most two seconds.
- ACE_Time_Value tv (2, 0);
+ case -1:
+ return -1;
- reactor.handle_events (tv);
+ case 0:
+ run_test (port1, remotehost, port2);
+ break;
- ACE_DEBUG ((LM_DEBUG, "return from handle events\n"));
- aal.send (buf, sizeof buf);
- ACE_DEBUG ((LM_DEBUG, ".\n"));
+ default:
+ run_test (port2, remotehost, port1);
+ break;
}
- ACE_NOTREACHED (return 0);
+ return 0;
}
diff --git a/examples/Reactor/Dgram/Dgram.cpp b/examples/Reactor/Dgram/Dgram.cpp
index a95929f229a..8cc307d8fe1 100644
--- a/examples/Reactor/Dgram/Dgram.cpp
+++ b/examples/Reactor/Dgram/Dgram.cpp
@@ -21,14 +21,10 @@ public:
virtual int handle_timeout (const ACE_Time_Value & tv,
const void *arg = 0);
-
- int timeouts_;
- // Number of timeouts thus far.
};
AAL_CP::AAL_CP (const ACE_INET_Addr &local_addr)
- : ACE_SOCK_Dgram (local_addr),
- timeouts_ (0)
+ : ACE_SOCK_Dgram (local_addr)
{
}
@@ -61,7 +57,6 @@ int
AAL_CP::handle_timeout (const ACE_Time_Value &, const void *)
{
ACE_DEBUG ((LM_DEBUG, "(%P|%t) timed out for aa1\n"));
- this->timeouts_++;
return 0;
}
@@ -70,7 +65,11 @@ run_test (u_short localport,
const char *remotehost,
u_short remoteport)
{
- AAL_CP aal (localport);
+ ACE_INET_Addr remote_addr (remoteport,
+ remotehost);
+ ACE_INET_Addr local_addr (localport);
+
+ AAL_CP aal (local_addr);
// Read data from other side.
if (ACE_Reactor::instance ()->register_handler
@@ -83,10 +82,6 @@ run_test (u_short localport,
ACE_OS::strcpy (buf, "Data to transmit");
size_t len = ACE_OS::strlen (buf);
- ACE_INET_Addr remote_addr (remoteport,
- remotehost);
- ACE_INET_Addr local_addr (localport);
-
if (localport == port1)
{
ACE_DEBUG ((LM_DEBUG, "(%P|%t) sending data\n"));