diff options
Diffstat (limited to 'performance-tests/UDP')
-rw-r--r-- | performance-tests/UDP/Makefile | 140 | ||||
-rw-r--r-- | performance-tests/UDP/README | 17 | ||||
-rw-r--r-- | performance-tests/UDP/udp_test.cpp | 736 |
3 files changed, 0 insertions, 893 deletions
diff --git a/performance-tests/UDP/Makefile b/performance-tests/UDP/Makefile deleted file mode 100644 index 465c76f4566..00000000000 --- a/performance-tests/UDP/Makefile +++ /dev/null @@ -1,140 +0,0 @@ -#---------------------------------------------------------------------------- -# $Id$ -# -# Makefile for tests of the miscellaneous ACE performance tests -#---------------------------------------------------------------------------- - -#---------------------------------------------------------------------------- -# Local macros -#---------------------------------------------------------------------------- - -BIN = udp_test -LDLIBS = $(MATHLIB) - -BUILD = $(VBIN) - -# For make depend. -SRC = $(addsuffix .cpp, $(BIN)) - -#---------------------------------------------------------------------------- -# Include macros and targets -#---------------------------------------------------------------------------- - -include $(ACE_ROOT)/include/makeinclude/wrapper_macros.GNU -include $(ACE_ROOT)/include/makeinclude/macros.GNU -include $(ACE_ROOT)/include/makeinclude/rules.common.GNU -include $(ACE_ROOT)/include/makeinclude/rules.nonested.GNU -include $(ACE_ROOT)/include/makeinclude/rules.lib.GNU -include $(ACE_ROOT)/include/makeinclude/rules.bin.GNU -include $(ACE_ROOT)/include/makeinclude/rules.local.GNU - -#---------------------------------------------------------------------------- -# Local targets -#---------------------------------------------------------------------------- - -#---------------------------------------------------------------------------- -# Dependencies -#---------------------------------------------------------------------------- - -# DO NOT DELETE THIS LINE -- g++dep uses it. -# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY. - - -.obj/udp_test.o .obj/udp_test.so .shobj/udp_test.o .shobj/udp_test.so: udp_test.cpp \ - $(ACE_ROOT)/ace/Reactor.h \ - $(ACE_ROOT)/ace/pre.h \ - $(ACE_ROOT)/ace/Handle_Set.h \ - $(ACE_ROOT)/ace/ACE.h \ - $(ACE_ROOT)/ace/OS.h \ - $(ACE_ROOT)/ace/post.h \ - $(ACE_ROOT)/ace/ace_wchar.h \ - $(ACE_ROOT)/ace/ACE_export.h \ - $(ACE_ROOT)/ace/svc_export.h \ - $(ACE_ROOT)/ace/OS_Dirent.h \ - $(ACE_ROOT)/ace/OS_Export.h \ - $(ACE_ROOT)/ace/OS_Dirent.inl \ - $(ACE_ROOT)/ace/OS_String.h \ - $(ACE_ROOT)/ace/OS_String.inl \ - $(ACE_ROOT)/ace/OS_Memory.h \ - $(ACE_ROOT)/ace/OS_Memory.inl \ - $(ACE_ROOT)/ace/OS_TLI.h \ - $(ACE_ROOT)/ace/OS_TLI.inl \ - $(ACE_ROOT)/ace/Min_Max.h \ - $(ACE_ROOT)/ace/streams.h \ - $(ACE_ROOT)/ace/Basic_Types.h \ - $(ACE_ROOT)/ace/Basic_Types.i \ - $(ACE_ROOT)/ace/Trace.h \ - $(ACE_ROOT)/ace/OS.i \ - $(ACE_ROOT)/ace/ACE.i \ - $(ACE_ROOT)/ace/Handle_Set.i \ - $(ACE_ROOT)/ace/Timer_Queue.h \ - $(ACE_ROOT)/ace/Synch.h \ - $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ - $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ - $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ - $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ - $(ACE_ROOT)/ace/Synch.i \ - $(ACE_ROOT)/ace/Synch_T.h \ - $(ACE_ROOT)/ace/Event_Handler.h \ - $(ACE_ROOT)/ace/Event_Handler.i \ - $(ACE_ROOT)/ace/Synch_T.i \ - $(ACE_ROOT)/ace/Thread.h \ - $(ACE_ROOT)/ace/Thread.i \ - $(ACE_ROOT)/ace/Atomic_Op.i \ - $(ACE_ROOT)/ace/Synch_T.cpp \ - $(ACE_ROOT)/ace/Log_Msg.h \ - $(ACE_ROOT)/ace/Log_Record.h \ - $(ACE_ROOT)/ace/Log_Priority.h \ - $(ACE_ROOT)/ace/Log_Record.i \ - $(ACE_ROOT)/ace/Timer_Queue_T.h \ - $(ACE_ROOT)/ace/Free_List.h \ - $(ACE_ROOT)/ace/Free_List.i \ - $(ACE_ROOT)/ace/Free_List.cpp \ - $(ACE_ROOT)/ace/Timer_Queue_T.i \ - $(ACE_ROOT)/ace/Timer_Queue_T.cpp \ - $(ACE_ROOT)/ace/Signal.h \ - $(ACE_ROOT)/ace/Containers.h \ - $(ACE_ROOT)/ace/Malloc_Base.h \ - $(ACE_ROOT)/ace/Containers.i \ - $(ACE_ROOT)/ace/Containers_T.h \ - $(ACE_ROOT)/ace/Containers_T.i \ - $(ACE_ROOT)/ace/Containers_T.cpp \ - $(ACE_ROOT)/ace/Malloc.h \ - $(ACE_ROOT)/ace/Based_Pointer_T.h \ - $(ACE_ROOT)/ace/Based_Pointer_T.i \ - $(ACE_ROOT)/ace/Based_Pointer_T.cpp \ - $(ACE_ROOT)/ace/Based_Pointer_Repository.h \ - $(ACE_ROOT)/ace/Singleton.h \ - $(ACE_ROOT)/ace/Singleton.i \ - $(ACE_ROOT)/ace/Singleton.cpp \ - $(ACE_ROOT)/ace/Object_Manager.h \ - $(ACE_ROOT)/ace/Object_Manager.i \ - $(ACE_ROOT)/ace/Managed_Object.h \ - $(ACE_ROOT)/ace/Managed_Object.i \ - $(ACE_ROOT)/ace/Managed_Object.cpp \ - $(ACE_ROOT)/ace/Malloc.i \ - $(ACE_ROOT)/ace/Malloc_T.h \ - $(ACE_ROOT)/ace/Malloc_T.i \ - $(ACE_ROOT)/ace/Malloc_T.cpp \ - $(ACE_ROOT)/ace/Memory_Pool.h \ - $(ACE_ROOT)/ace/Mem_Map.h \ - $(ACE_ROOT)/ace/Mem_Map.i \ - $(ACE_ROOT)/ace/Memory_Pool.i \ - $(ACE_ROOT)/ace/Signal.i \ - $(ACE_ROOT)/ace/Reactor.i \ - $(ACE_ROOT)/ace/Reactor_Impl.h \ - $(ACE_ROOT)/ace/SOCK_Dgram.h \ - $(ACE_ROOT)/ace/SOCK.h \ - $(ACE_ROOT)/ace/Addr.h \ - $(ACE_ROOT)/ace/Addr.i \ - $(ACE_ROOT)/ace/IPC_SAP.h \ - $(ACE_ROOT)/ace/IPC_SAP.i \ - $(ACE_ROOT)/ace/QoS_Session.h \ - $(ACE_ROOT)/ace/INET_Addr.h \ - $(ACE_ROOT)/ace/INET_Addr.i \ - $(ACE_ROOT)/ace/SOCK.i \ - $(ACE_ROOT)/ace/SOCK_Dgram.i \ - $(ACE_ROOT)/ace/Get_Opt.h \ - $(ACE_ROOT)/ace/Get_Opt.i - -# IF YOU PUT ANYTHING HERE IT WILL GO AWAY diff --git a/performance-tests/UDP/README b/performance-tests/UDP/README deleted file mode 100644 index f2eb3308e1e..00000000000 --- a/performance-tests/UDP/README +++ /dev/null @@ -1,17 +0,0 @@ -// $Id$ - -udp_test sends UDP packets and records round-trip latency. The client -records the latencies and provides nice summary statistics. The server -simply echos packets back to the client. - -To run: - 1) On server host: - % ./udp_test -r - - 2) On client host: - % ./udp_test -t -n 1000 <server host> - -The -n option specifies the number of samples (packets to send). -Other command line options are available: ./udp_test -? to -list them. - diff --git a/performance-tests/UDP/udp_test.cpp b/performance-tests/UDP/udp_test.cpp deleted file mode 100644 index a4ded75032e..00000000000 --- a/performance-tests/UDP/udp_test.cpp +++ /dev/null @@ -1,736 +0,0 @@ -// $Id$ - -// ============================================================================ -// -// = LIBRARY -// performance-tests/UDP -// -// = FILENAME -// udp_test.cpp -// -// = DESCRIPTION -// Measures UDP round-trip performance. -// -// = AUTHORS -// Fred Kuhns and David L. Levine -// -// ============================================================================ - -#include "ace/Reactor.h" -#include "ace/SOCK_Dgram.h" -#include "ace/INET_Addr.h" -#include "ace/ACE.h" -#include "ace/Get_Opt.h" -#include "ace/Log_Msg.h" -#include <math.h> - -ACE_RCSID(UDP, udp_test, "$Id$") - -// Global variables (evil). -static const u_short DEFPORT = 5050; -static const int MAXPKTSZ = 65536; -static const int DEFPKTSZ = 64; -static const int DEFITERATIONS = 1000; -static const int DEFINTERVAL = 1000; // 1000 usecs. -static const int DEFWINDOWSZ = 10; // 10 microsecond. -static char SendBuf[MAXPKTSZ]; -static char RxBuf[MAXPKTSZ]; -static char **cmd; -static char datafile[MAXHOSTNAMELEN]; - -static ACE_UINT32 nsamples = DEFITERATIONS; -static int usdelay = DEFINTERVAL; -static int bufsz = DEFPKTSZ; -static int window = DEFWINDOWSZ; -static int VERBOSE = 0; -static int logfile = 0; -static int server = 0; -static int client = 0; -static u_int use_reactor = 0; -ACE_hrtime_t max_allow = 0; -ACE_hrtime_t total_ltime; -ACE_hrtime_t ltime; - -static void -usage (void) -{ - ACE_ERROR ((LM_ERROR, - "%s\n" - "[-w window_size]\n" - " [-f datafile] (creates datafile.samp and datafile.dist)\n" - " [-v] (Verbose)\n" - " [-b send_bufsz]\n" - " [-n nsamples]\n" - " [-I usdelay]\n" - " [-s so_bufsz] \n" - " [-p port]\n" - " [-t]\n" - " [-r]\n" - " [-x max_sample_allowed]\n" - " [-a to use the ACE reactor]\n" - " targethost \n", - *cmd)); -} - -static ACE_hrtime_t *Samples; -static u_int *Dist; -static char sumfile[30]; -static char distfile[30]; -static char sampfile[30]; - -class Client : public ACE_Event_Handler -{ -public: - Client (const ACE_INET_Addr &addr, - const ACE_INET_Addr &remote_addr); - - virtual ~Client (void); - - // = Override <ACE_Event_Handler> methods. - virtual ACE_HANDLE get_handle (void) const; - virtual int handle_input (ACE_HANDLE); - virtual int handle_close (ACE_HANDLE handle, - ACE_Reactor_Mask close_mask); - - int send (const char *buf, size_t len); - // Send the <buf> to the server. - - int get_response (char *buf, size_t len); - // Wait for the response. - - int run (void); - // Send messages to server and record statistics. - - int shutdown (void); - // Send shutdown message to server. - -private: - ACE_SOCK_Dgram endpoint_; - // To send messages and receive responses. - - ACE_INET_Addr remote_addr_; - // The address to send messages to. - - ACE_UNIMPLEMENTED_FUNC (Client (void)) - ACE_UNIMPLEMENTED_FUNC (Client (const Client &)) - ACE_UNIMPLEMENTED_FUNC (Client &operator= (const Client &)) -}; - -Client::Client (const ACE_INET_Addr &addr, - const ACE_INET_Addr &remote_addr) - : endpoint_ (addr), - remote_addr_ (remote_addr) -{ - if (use_reactor) - { - if (ACE_Reactor::instance ()->register_handler - (this, ACE_Event_Handler::READ_MASK) == -1) - ACE_ERROR ((LM_ERROR, - "ACE_Reactor::register_handler: Client\n")); - } -} - -Client::~Client (void) -{ -} - -ACE_HANDLE -Client::get_handle (void) const -{ - return endpoint_.get_handle (); -} - -int -Client::handle_input (ACE_HANDLE) -{ - char buf[BUFSIZ]; - ACE_INET_Addr from_addr; - - ssize_t n = endpoint_.recv (buf, sizeof buf, from_addr); - - if (n == -1) - ACE_ERROR ((LM_ERROR, - "%p\n", - "handle_input")); - else - ACE_DEBUG ((LM_DEBUG, - "(%P|%t) buf of size %d = %*s\n", - n, - n, - buf)); - - return 0; -} - -int -Client::handle_close (ACE_HANDLE, - ACE_Reactor_Mask) -{ - this->endpoint_.close (); - return 0; -} - -int -Client::send (const char *buf, size_t len) -{ - return this->endpoint_.send (buf, len, remote_addr_); -} - -int -Client::get_response (char *buf, size_t len) -{ - ACE_INET_Addr addr; - return this->endpoint_.recv (buf, len, addr); -} - -int -Client::run (void) -{ - int ndist = 0; - int i; - int j; - int n; - int maxindx = 0; - int minindx = 0; - char *sbuf = SendBuf; - char *rbuf = RxBuf; - - ACE_hrtime_t start; - ACE_hrtime_t end; - ACE_hrtime_t sample; - -#if defined (ACE_LACKS_FLOATING_POINT) - ACE_hrtime_t sample_mean; -#else /* ! ACE_LACKS_FLOATING_POINT */ - int d; - double std_dev = 0.0; - double std_err = 0.0; - double sample_mean = 0.0; -#endif /* ! ACE_LACKS_FLOATING_POINT */ - - ACE_hrtime_t last_over = 0; - ACE_hrtime_t psum = 0; - ACE_hrtime_t sum = 0; - ACE_hrtime_t max = 0; - ACE_hrtime_t min = (ACE_hrtime_t) (u_int) -1; - FILE *sumfp = 0; - FILE *distfp = 0; - FILE *sampfp = 0; - pid_t *pid = (pid_t *) sbuf; - int *seq = (int *) (sbuf + sizeof (int)); - - ACE_OS::memset (sbuf, 0, bufsz); - ACE_OS::memset (rbuf, 0, bufsz); - - *pid = ACE_OS::getpid (); - *seq = 0; - - ACE_DEBUG ((LM_DEBUG, - "PID = %d, Starting SEQ = %d\n", - *pid, - *seq)); - - // Allocate memory to hold samples. - Samples = (ACE_hrtime_t *) ACE_OS::calloc (nsamples, - sizeof (ACE_hrtime_t)); - - for (i = -1, *seq = 0, j = 0; - i < (ACE_INT32) nsamples; - (*seq)++, i++, j++) - { - start = ACE_OS::gethrtime (); - if (send (sbuf, bufsz) <= 0) - ACE_ERROR_RETURN ((LM_ERROR, "(%P) %p\n", "send"), -1); - - if ((n = get_response (rbuf, bufsz)) <= 0) - ACE_ERROR_RETURN ((LM_ERROR, "(%P) %p\n", "get_response"), -1); - - end = ACE_OS::gethrtime (); - - if (n <= 0) - ACE_ERROR_RETURN ((LM_ERROR, - "\nTrouble receiving from socket!\n\n"), - -1); - - sample = end - start; // in nanoseconds. - - if (i < 0 ) - { - ACE_DEBUG ((LM_DEBUG, - "Ignoring first sample of %u usecs\n", - (ACE_UINT32) (sample / (ACE_UINT32) 1000))); - continue; - } - else if (max_allow > 0 && sample > max_allow) - { - ACE_DEBUG ((LM_DEBUG, "Sample # %i = " - "%u msec is over the limit (%u)!\n", - i, - (ACE_UINT32) (sample / (ACE_UINT32) 1000000), - (ACE_UINT32) (max_allow / (ACE_UINT32) 1000000))); - - if (last_over > 0) - ACE_DEBUG ((LM_DEBUG, - "\tTime since last over = %u msec!\n", - (ACE_UINT32) ((end - last_over) / - (ACE_UINT32) 1000000))); - last_over = end; - i--; - continue; - } - - Samples[i] = sample; - sum += sample; - - if (min == (ACE_hrtime_t) (u_int) -1) - { - min = sample; - minindx = i; - } - if (sample > max) - { - max = sample; - maxindx = i; - } - if (sample < min) - { - min = sample; - minindx = i; - } - - if (VERBOSE) - { - psum += sample; - if (j == 500) - { - ACE_DEBUG ((LM_DEBUG, - "(%i) Partial (running) mean %u usecs\n", - i + 1, - (ACE_UINT32) (psum / (ACE_UINT32) (1000 * 500)))); - j = 0; - psum = 0; - } - } - } - -#if defined (ACE_LACKS_FLOATING_POINT) - sample_mean = sum / nsamples; -#else /* ! ACE_LACKS_FLOATING_POINT */ - sample_mean = ((double) ACE_U64_TO_U32 (sum)) / (double) nsamples; -#endif /* ! ACE_LACKS_FLOATING_POINT */ - - if (logfile) - { - ACE_OS::sprintf (sumfile, "%s.sum", datafile); - ACE_OS::sprintf (distfile, "%s.dist", datafile); - ACE_OS::sprintf (sampfile, "%s.samp", datafile); - - distfp = ACE_OS::fopen(distfile, "w"); - - if (distfp == NULL) - { - ACE_DEBUG ((LM_DEBUG, - "Unable to open dist file!\n\n")); - logfile = 0; - } - if (logfile && (sampfp = ACE_OS::fopen (sampfile, "w")) == NULL) - { - ACE_OS::fclose (distfp); - ACE_DEBUG ((LM_DEBUG, - "Unable to open sample file!\n\n")); - logfile = 0; - } - if (logfile && (sumfp = ACE_OS::fopen (sumfile, "w")) == NULL) - { - ACE_OS::fclose (distfp); - ACE_OS::fclose (sampfp); - ACE_DEBUG ((LM_DEBUG, - "Unable to open sample file!\n\n")); - logfile = 0; - } - } - - if (window) - { - window = window * 1000; // convert to nsec. - ndist = (int)((max-min) / window) + 1; - Dist = (u_int *) ACE_OS::calloc (ndist, - sizeof (u_int)); - } - -#if ! defined (ACE_LACKS_FLOATING_POINT) - for (i = 0; i < (ACE_INT32) nsamples; i++) - { - std_dev += ((double) ACE_U64_TO_U32 (Samples[i]) - sample_mean) * - ((double) ACE_U64_TO_U32 (Samples[i]) - sample_mean); - d = (int)((Samples[i] - min)/window); - - if (d < 0 || d > ndist) - { - ACE_DEBUG ((LM_DEBUG, - "\nError indexing into dist array %d (%d)\n\n", - d, - ndist)); - ACE_OS::exit (1); - } - Dist[d] += 1; - if (logfile) - ACE_OS::fprintf (sampfp, - "%u\n", - ACE_U64_TO_U32 (Samples[i])); - } -#endif /* ACE_LACKS_FLOATING_POINT */ - - if (logfile) - { - ACE_hrtime_t tmp; - tmp = min + (window / 2); - - for (i = 0; i < ndist; i++) - { - ACE_OS::fprintf (distfp, - "%u %d\n", - (ACE_UINT32) (tmp / (ACE_UINT32) 1000), - Dist[i]); - tmp += window; - } - } - -#if defined (ACE_LACKS_FLOATING_POINT) - ACE_DEBUG ((LM_DEBUG, - "\nResults for %i samples (usec):\n" - "\tSample Mean = %u,\n" - "\tSample Max = %u, Max index = %u,\n" - "\tSample Min = %u, Min index = %u,\n", - nsamples, - (ACE_UINT32) (sample_mean / (ACE_UINT32) 1000), - (ACE_UINT32) (max / (ACE_UINT32) 1000), - maxindx, - (ACE_UINT32) (min / (ACE_UINT32) 1000), - minindx)); -#else /* ! ACE_LACKS_FLOATING_POINT */ - std_dev = (double) sqrt (std_dev / (double) (nsamples - 1.0)); - std_err = (double) std_dev / sqrt ((double) nsamples); - - ACE_DEBUG ((LM_DEBUG, - "\nResults for %i samples (usec):\n" - "\tSample Mean = %f,\n" - "\tSample Max = %u, Max index = %d,\n" - "\tSample Min = %u, Min index = %d,\n" - "\tStandard Deviation = %f,\n" - "\tStandard Error = %f\n", - nsamples, - sample_mean / 1000.0, - (u_int) (max / (ACE_UINT32) 1000), - maxindx, - (u_int) (min / (ACE_UINT32) 1000), - minindx, - std_dev / 1000.0, - std_err / 1000.0)); - - if (logfile) - { - ACE_OS::fprintf (sumfp, - "Command executed: \n"); - for (; *cmd; cmd++) - ACE_OS::fprintf (sumfp, - "%s ", - *cmd); - ACE_OS::fprintf (sumfp, - "\n"); - - ACE_OS::fprintf (sumfp, - "\nResults for %i samples (usec):" - "\tSample Mean = %f,\n" - "\tSample Max = %u, Max index = %d,\n" - "\tSample Min = %u, Min index = %d,\n" - "\tStandard Deviation = %f,\n" - "\tStandard Error = %f\n", - nsamples, - sample_mean / 1000.0, - (ACE_UINT32) (max / (ACE_UINT32) 1000), - maxindx, - (ACE_UINT32) (min / (ACE_UINT32) 1000), - minindx, - std_dev / 1000.0, - std_err / 1000.0); - } -#endif /* ! ACE_LACKS_FLOATING_POINT */ - - return 0; -} - -int -Client::shutdown (void) -{ - const char buf = 'S'; - const int n = endpoint_.send (&buf, 1u, remote_addr_); - - if (use_reactor) - { - if (ACE_Reactor::instance ()->remove_handler - (this, ACE_Event_Handler::READ_MASK) == -1) - ACE_ERROR_RETURN ((LM_ERROR, - "ACE_Reactor::remove_handler: Client\n"), - -1); - } - - return n; -} - -class Server : public ACE_Event_Handler -{ -public: - Server (const ACE_INET_Addr &addr); - - virtual ~Server (void); - - // = Override <ACE_Event_Handler> methods. - virtual ACE_HANDLE get_handle (void) const; - virtual int handle_input (ACE_HANDLE); - virtual int handle_close (ACE_HANDLE handle, - ACE_Reactor_Mask close_mask); - -private: - ACE_SOCK_Dgram endpoint_; - // Receives datagrams. - - ACE_UNIMPLEMENTED_FUNC (Server (void)) - ACE_UNIMPLEMENTED_FUNC (Server (const Server &)) - ACE_UNIMPLEMENTED_FUNC (Server &operator= (const Server &)) -}; - -Server::Server (const ACE_INET_Addr &addr) - : endpoint_ (addr) -{ - if (use_reactor) - { - if (ACE_Reactor::instance ()->register_handler - (this, - ACE_Event_Handler::READ_MASK) == -1) - ACE_ERROR ((LM_ERROR, - "ACE_Reactor::register_handler: Server\n")); - } -} - -Server::~Server (void) -{ -} - -ACE_HANDLE -Server::get_handle (void) const -{ - return endpoint_.get_handle (); -} - -int -Server::handle_input (ACE_HANDLE) -{ - char buf[BUFSIZ]; - ACE_INET_Addr from_addr; - - ssize_t n = endpoint_.recv (buf, sizeof buf, from_addr); - - if (n == -1) - ACE_DEBUG ((LM_ERROR, - "%p\n", - "handle_input: recv")); - - // Send the message back as the response. - if (endpoint_.send (buf, n, from_addr) == n) - { - if (n == 1 && buf[0] == 'S') - { - if (use_reactor) - { - if (ACE_Reactor::instance ()->remove_handler - (this, ACE_Event_Handler::READ_MASK) == -1) - ACE_ERROR_RETURN ((LM_ERROR, - "ACE_Reactor::remove_handler: server\n"), - -1); - - ACE_Reactor::end_event_loop (); - } - else - { - // Indicate done by returning 1. - return 1; - } - } - - return 0; - } - else - { - ACE_DEBUG ((LM_ERROR, - "%p\n", - "handle_input: send")); - return -1; - } -} - -int -Server::handle_close (ACE_HANDLE, - ACE_Reactor_Mask) -{ - endpoint_.close (); - - return 0; -} - -int -main (int argc, char *argv[]) -{ - int c, dstport = DEFPORT; - int so_bufsz = 0; - - cmd = argv; - - ACE_Get_Opt getopt (argc, argv, "x:w:f:vs:I:p:rtn:b:a"); - - while ((c = getopt ()) != -1) - { - switch ((char) c) - { - case 'x': - max_allow = ACE_OS::atoi (getopt.optarg); - break; - case 'w': - window = ACE_OS::atoi (getopt.optarg); - if (window < 0) - ACE_ERROR_RETURN ((LM_ERROR, - "Invalid window!\n\n"), - 1); - break; - case 'f': - ACE_OS::strcpy (datafile, getopt.optarg); - logfile = 1; - break; - case 'v': - VERBOSE = 1; - break; - case 'b': - bufsz = ACE_OS::atoi (getopt.optarg); - - if (bufsz <= 0) - ACE_ERROR_RETURN ((LM_ERROR, - "\nBuffer size must be greater than 0!\n\n"), - 1); - - case 'n': - nsamples = ACE_OS::atoi (getopt.optarg); - if (nsamples <= 0) - ACE_ERROR_RETURN ((LM_ERROR, - "\nIterations must be greater than 0!\n\n"), - 1); - break; - case 'a': - use_reactor = 1; - break; - case 's': - so_bufsz = ACE_OS::atoi (getopt.optarg); - - if (so_bufsz <= 0) - ACE_ERROR_RETURN ((LM_ERROR, - "\nInvalid socket buffer size!\n\n"), - 1); - break; - case 'I': - usdelay = ACE_OS::atoi (getopt.optarg); - - if (usdelay == 0) - ACE_ERROR_RETURN ((LM_ERROR, - "%s: bad usdelay: %s\n", - argv[0], - getopt.optarg), - 1); - break; - case 'p': - dstport = ACE_OS::atoi (getopt.optarg); - if (dstport <= 0) - ACE_ERROR_RETURN ((LM_ERROR, - "\nInvalid port number!\n\n"), - 1); - break; - case 't': - server = 0; - client = 1; - break; - case 'r': - client = 0; - server = 1; - break; - default: - usage (); - return 1; - } - } - - if (getopt.optind >= argc && client || argc == 1) - { - usage (); - return 1; - } - - ACE_INET_Addr addr (server ? dstport : dstport + 1); - - if (server) - { - Server server (addr); - - if (use_reactor) - { - ACE_Reactor::run_event_loop (); - } - else - { - // Handle input in the current thread. - while (server.handle_input (0) != 1) - continue; - } - } - else - { - if ((u_int) bufsz < sizeof (ACE_hrtime_t)) - ACE_ERROR_RETURN ((LM_ERROR, - "\nbufsz must be >= %d\n", - sizeof (ACE_hrtime_t)), - 1); - ACE_INET_Addr remote_addr; - - if (isdigit(argv[getopt.optind][0])) - { - if (remote_addr.set (dstport, - (ACE_UINT32) ACE_OS::inet_addr - (argv[getopt.optind])) == -1) - ACE_ERROR_RETURN ((LM_ERROR, - "invalid IP address: %s\n", - argv[getopt.optind]), - 1); - } - else - { - if (remote_addr.set (dstport, argv[getopt.optind]) == -1) - ACE_ERROR_RETURN ((LM_ERROR, - "invalid IP address: %s\n", - argv[getopt.optind]), - 1); - } - getopt.optind++; - - Client client (addr, remote_addr); - - ACE_DEBUG ((LM_DEBUG, - "\nSending %d byte packets to %s:%d " - "with so_bufsz = %d\n\n", - bufsz, - addr.get_host_name (), - dstport, - so_bufsz)); - - client.run (); - client.shutdown (); - } - - return 0; -} |