diff options
author | schmidt <douglascraigschmidt@users.noreply.github.com> | 1997-12-05 21:42:42 +0000 |
---|---|---|
committer | schmidt <douglascraigschmidt@users.noreply.github.com> | 1997-12-05 21:42:42 +0000 |
commit | c8c55e76b7fb4b4532dc429deea911e83daeb1d9 (patch) | |
tree | 84d891b0412640d200334ce11406848dc5cb07b3 /examples | |
parent | 07e462372ca8ee7a66d5f7758ce4d844356b000d (diff) | |
download | ATCD-c8c55e76b7fb4b4532dc429deea911e83daeb1d9.tar.gz |
*** empty log message ***
Diffstat (limited to 'examples')
-rw-r--r-- | examples/Reactor/Dgram/CODgram.cpp | 150 | ||||
-rw-r--r-- | examples/Reactor/Dgram/Dgram.cpp | 17 |
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")); |