From f6fa41dd7b3677d0f7441db83cbd6c8a0283a499 Mon Sep 17 00:00:00 2001 From: Martin Lucina Date: Sat, 10 Apr 2010 16:51:22 +0200 Subject: Compile perf tests with the C++ compiler This lets us build the binaries in a portable fashion w/o having to worry about how to link with the C++ runtime. --- configure.in | 7 --- perf/Makefile.am | 8 ++-- perf/local_lat.c | 106 ---------------------------------------- perf/local_lat.cpp | 106 ++++++++++++++++++++++++++++++++++++++++ perf/local_thr.c | 136 ---------------------------------------------------- perf/local_thr.cpp | 136 ++++++++++++++++++++++++++++++++++++++++++++++++++++ perf/remote_lat.c | 119 --------------------------------------------- perf/remote_lat.cpp | 119 +++++++++++++++++++++++++++++++++++++++++++++ perf/remote_thr.c | 98 ------------------------------------- perf/remote_thr.cpp | 98 +++++++++++++++++++++++++++++++++++++ 10 files changed, 463 insertions(+), 470 deletions(-) delete mode 100644 perf/local_lat.c create mode 100644 perf/local_lat.cpp delete mode 100644 perf/local_thr.c create mode 100644 perf/local_thr.cpp delete mode 100644 perf/remote_lat.c create mode 100644 perf/remote_lat.cpp delete mode 100644 perf/remote_thr.c create mode 100644 perf/remote_thr.cpp diff --git a/configure.in b/configure.in index e936cc7..ae944b4 100644 --- a/configure.in +++ b/configure.in @@ -55,13 +55,6 @@ fi # Checks for libraries. AC_CHECK_LIB([pthread], [pthread_create]) -# If using GNU C/C++ and static linking, libstdc++ must be available. -if test "x$gnu_compilers" = "xyes" -a "x$enable_shared" = "xno"; then - # libstdc++ depends on libm on some platforms - AC_CHECK_LIB([m], [main]) - AC_CHECK_LIB([stdc++], [main], , - [AC_MSG_ERROR([cannot link with -lstdc++])]) -fi # Extra CXXFLAGS are appended at the end of CXXFLAGS for libzmq. LIBZMQ_EXTRA_CXXFLAGS="" diff --git a/perf/Makefile.am b/perf/Makefile.am index d48dcee..fe35ff3 100644 --- a/perf/Makefile.am +++ b/perf/Makefile.am @@ -7,19 +7,19 @@ endif noinst_PROGRAMS = local_lat remote_lat local_thr remote_thr $(PGM_EXAMPLES_BINS) local_lat_LDADD = $(top_builddir)/src/libzmq.la -local_lat_SOURCES = local_lat.c +local_lat_SOURCES = local_lat.cpp local_lat_CXXFLAGS = -Wall -pedantic -Werror remote_lat_LDADD = $(top_builddir)/src/libzmq.la -remote_lat_SOURCES = remote_lat.c +remote_lat_SOURCES = remote_lat.cpp remote_lat_CXXFLAGS = -Wall -pedantic -Werror local_thr_LDADD = $(top_builddir)/src/libzmq.la -local_thr_SOURCES = local_thr.c +local_thr_SOURCES = local_thr.cpp local_thr_CXXFLAGS = -Wall -pedantic -Werror remote_thr_LDADD = $(top_builddir)/src/libzmq.la -remote_thr_SOURCES = remote_thr.c +remote_thr_SOURCES = remote_thr.cpp remote_thr_CXXFLAGS = -Wall -pedantic -Werror if BUILD_PGM_EXAMPLES diff --git a/perf/local_lat.c b/perf/local_lat.c deleted file mode 100644 index 0114b23..0000000 --- a/perf/local_lat.c +++ /dev/null @@ -1,106 +0,0 @@ -/* - Copyright (c) 2007-2010 iMatix Corporation - - This file is part of 0MQ. - - 0MQ is free software; you can redistribute it and/or modify it under - the terms of the Lesser GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - 0MQ is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - Lesser GNU General Public License for more details. - - You should have received a copy of the Lesser GNU General Public License - along with this program. If not, see . -*/ - -#include "../include/zmq.h" -#include -#include - -int main (int argc, char *argv []) -{ - const char *bind_to; - int roundtrip_count; - int message_size; - void *ctx; - void *s; - int rc; - int i; - zmq_msg_t msg; - - if (argc != 4) { - printf ("usage: local_lat " - "\n"); - return 1; - } - bind_to = argv [1]; - message_size = atoi (argv [2]); - roundtrip_count = atoi (argv [3]); - - ctx = zmq_init (1, 1, 0); - if (!ctx) { - printf ("error in zmq_init: %s\n", zmq_strerror (errno)); - return -1; - } - - s = zmq_socket (ctx, ZMQ_REP); - if (!s) { - printf ("error in zmq_socket: %s\n", zmq_strerror (errno)); - return -1; - } - - rc = zmq_bind (s, bind_to); - if (rc != 0) { - printf ("error in zmq_bind: %s\n", zmq_strerror (errno)); - return -1; - } - - rc = zmq_msg_init (&msg); - if (rc != 0) { - printf ("error in zmq_msg_init: %s\n", zmq_strerror (errno)); - return -1; - } - - for (i = 0; i != roundtrip_count; i++) { - rc = zmq_recv (s, &msg, 0); - if (rc != 0) { - printf ("error in zmq_recv: %s\n", zmq_strerror (errno)); - return -1; - } - if (zmq_msg_size (&msg) != message_size) { - printf ("message of incorrect size received\n"); - return -1; - } - rc = zmq_send (s, &msg, 0); - if (rc != 0) { - printf ("error in zmq_send: %s\n", zmq_strerror (errno)); - return -1; - } - } - - rc = zmq_msg_close (&msg); - if (rc != 0) { - printf ("error in zmq_msg_close: %s\n", zmq_strerror (errno)); - return -1; - } - - zmq_sleep (1); - - rc = zmq_close (s); - if (rc != 0) { - printf ("error in zmq_close: %s\n", zmq_strerror (errno)); - return -1; - } - - rc = zmq_term (ctx); - if (rc != 0) { - printf ("error in zmq_term: %s\n", zmq_strerror (errno)); - return -1; - } - - return 0; -} diff --git a/perf/local_lat.cpp b/perf/local_lat.cpp new file mode 100644 index 0000000..9297137 --- /dev/null +++ b/perf/local_lat.cpp @@ -0,0 +1,106 @@ +/* + Copyright (c) 2007-2010 iMatix Corporation + + This file is part of 0MQ. + + 0MQ is free software; you can redistribute it and/or modify it under + the terms of the Lesser GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + 0MQ is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + Lesser GNU General Public License for more details. + + You should have received a copy of the Lesser GNU General Public License + along with this program. If not, see . +*/ + +#include "../include/zmq.h" +#include +#include + +int main (int argc, char *argv []) +{ + const char *bind_to; + int roundtrip_count; + size_t message_size; + void *ctx; + void *s; + int rc; + int i; + zmq_msg_t msg; + + if (argc != 4) { + printf ("usage: local_lat " + "\n"); + return 1; + } + bind_to = argv [1]; + message_size = atoi (argv [2]); + roundtrip_count = atoi (argv [3]); + + ctx = zmq_init (1, 1, 0); + if (!ctx) { + printf ("error in zmq_init: %s\n", zmq_strerror (errno)); + return -1; + } + + s = zmq_socket (ctx, ZMQ_REP); + if (!s) { + printf ("error in zmq_socket: %s\n", zmq_strerror (errno)); + return -1; + } + + rc = zmq_bind (s, bind_to); + if (rc != 0) { + printf ("error in zmq_bind: %s\n", zmq_strerror (errno)); + return -1; + } + + rc = zmq_msg_init (&msg); + if (rc != 0) { + printf ("error in zmq_msg_init: %s\n", zmq_strerror (errno)); + return -1; + } + + for (i = 0; i != roundtrip_count; i++) { + rc = zmq_recv (s, &msg, 0); + if (rc != 0) { + printf ("error in zmq_recv: %s\n", zmq_strerror (errno)); + return -1; + } + if (zmq_msg_size (&msg) != message_size) { + printf ("message of incorrect size received\n"); + return -1; + } + rc = zmq_send (s, &msg, 0); + if (rc != 0) { + printf ("error in zmq_send: %s\n", zmq_strerror (errno)); + return -1; + } + } + + rc = zmq_msg_close (&msg); + if (rc != 0) { + printf ("error in zmq_msg_close: %s\n", zmq_strerror (errno)); + return -1; + } + + zmq_sleep (1); + + rc = zmq_close (s); + if (rc != 0) { + printf ("error in zmq_close: %s\n", zmq_strerror (errno)); + return -1; + } + + rc = zmq_term (ctx); + if (rc != 0) { + printf ("error in zmq_term: %s\n", zmq_strerror (errno)); + return -1; + } + + return 0; +} diff --git a/perf/local_thr.c b/perf/local_thr.c deleted file mode 100644 index 908bbe3..0000000 --- a/perf/local_thr.c +++ /dev/null @@ -1,136 +0,0 @@ -/* - Copyright (c) 2007-2010 iMatix Corporation - - This file is part of 0MQ. - - 0MQ is free software; you can redistribute it and/or modify it under - the terms of the Lesser GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - 0MQ is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - Lesser GNU General Public License for more details. - - You should have received a copy of the Lesser GNU General Public License - along with this program. If not, see . -*/ - -#include "../include/zmq.h" -#include -#include - -int main (int argc, char *argv []) -{ - const char *bind_to; - int message_count; - int message_size; - void *ctx; - void *s; - int rc; - int i; - zmq_msg_t msg; - void *watch; - unsigned long elapsed; - unsigned long throughput; - double megabits; - - if (argc != 4) { - printf ("usage: local_thr \n"); - return 1; - } - bind_to = argv [1]; - message_size = atoi (argv [2]); - message_count = atoi (argv [3]); - - ctx = zmq_init (1, 1, 0); - if (!ctx) { - printf ("error in zmq_send: %s\n", zmq_strerror (errno)); - return -1; - } - - s = zmq_socket (ctx, ZMQ_SUB); - if (!s) { - printf ("error in zmq_socket: %s\n", zmq_strerror (errno)); - return -1; - } - - rc = zmq_setsockopt (s, ZMQ_SUBSCRIBE , "", 0); - if (rc != 0) { - printf ("error in zmq_setsockopt: %s\n", zmq_strerror (errno)); - return -1; - } - - // Add your socket options here. - // For example ZMQ_RATE, ZMQ_RECOVERY_IVL and ZMQ_MCAST_LOOP for PGM. - - rc = zmq_bind (s, bind_to); - if (rc != 0) { - printf ("error in zmq_bind: %s\n", zmq_strerror (errno)); - return -1; - } - - rc = zmq_msg_init (&msg); - if (rc != 0) { - printf ("error in zmq_msg_init: %s\n", zmq_strerror (errno)); - return -1; - } - - rc = zmq_recv (s, &msg, 0); - if (rc != 0) { - printf ("error in zmq_recv: %s\n", zmq_strerror (errno)); - return -1; - } - if (zmq_msg_size (&msg) != message_size) { - printf ("message of incorrect size received\n"); - return -1; - } - - watch = zmq_stopwatch_start (); - - for (i = 0; i != message_count - 1; i++) { - rc = zmq_recv (s, &msg, 0); - if (rc != 0) { - printf ("error in zmq_recv: %s\n", zmq_strerror (errno)); - return -1; - } - if (zmq_msg_size (&msg) != message_size) { - printf ("message of incorrect size received\n"); - return -1; - } - } - - elapsed = zmq_stopwatch_stop (watch); - if (elapsed == 0) - elapsed = 1; - - rc = zmq_msg_close (&msg); - if (rc != 0) { - printf ("error in zmq_msg_close: %s\n", zmq_strerror (errno)); - return -1; - } - - throughput = (unsigned long) - ((double) message_count / (double) elapsed * 1000000); - megabits = (double) (throughput * message_size * 8) / 1000000; - - printf ("message size: %d [B]\n", (int) message_size); - printf ("message count: %d\n", (int) message_count); - printf ("mean throughput: %d [msg/s]\n", (int) throughput); - printf ("mean throughput: %.3f [Mb/s]\n", (double) megabits); - - rc = zmq_close (s); - if (rc != 0) { - printf ("error in zmq_close: %s\n", zmq_strerror (errno)); - return -1; - } - - rc = zmq_term (ctx); - if (rc != 0) { - printf ("error in zmq_term: %s\n", zmq_strerror (errno)); - return -1; - } - - return 0; -} diff --git a/perf/local_thr.cpp b/perf/local_thr.cpp new file mode 100644 index 0000000..b612157 --- /dev/null +++ b/perf/local_thr.cpp @@ -0,0 +1,136 @@ +/* + Copyright (c) 2007-2010 iMatix Corporation + + This file is part of 0MQ. + + 0MQ is free software; you can redistribute it and/or modify it under + the terms of the Lesser GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + 0MQ is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + Lesser GNU General Public License for more details. + + You should have received a copy of the Lesser GNU General Public License + along with this program. If not, see . +*/ + +#include "../include/zmq.h" +#include +#include + +int main (int argc, char *argv []) +{ + const char *bind_to; + int message_count; + size_t message_size; + void *ctx; + void *s; + int rc; + int i; + zmq_msg_t msg; + void *watch; + unsigned long elapsed; + unsigned long throughput; + double megabits; + + if (argc != 4) { + printf ("usage: local_thr \n"); + return 1; + } + bind_to = argv [1]; + message_size = atoi (argv [2]); + message_count = atoi (argv [3]); + + ctx = zmq_init (1, 1, 0); + if (!ctx) { + printf ("error in zmq_send: %s\n", zmq_strerror (errno)); + return -1; + } + + s = zmq_socket (ctx, ZMQ_SUB); + if (!s) { + printf ("error in zmq_socket: %s\n", zmq_strerror (errno)); + return -1; + } + + rc = zmq_setsockopt (s, ZMQ_SUBSCRIBE , "", 0); + if (rc != 0) { + printf ("error in zmq_setsockopt: %s\n", zmq_strerror (errno)); + return -1; + } + + // Add your socket options here. + // For example ZMQ_RATE, ZMQ_RECOVERY_IVL and ZMQ_MCAST_LOOP for PGM. + + rc = zmq_bind (s, bind_to); + if (rc != 0) { + printf ("error in zmq_bind: %s\n", zmq_strerror (errno)); + return -1; + } + + rc = zmq_msg_init (&msg); + if (rc != 0) { + printf ("error in zmq_msg_init: %s\n", zmq_strerror (errno)); + return -1; + } + + rc = zmq_recv (s, &msg, 0); + if (rc != 0) { + printf ("error in zmq_recv: %s\n", zmq_strerror (errno)); + return -1; + } + if (zmq_msg_size (&msg) != message_size) { + printf ("message of incorrect size received\n"); + return -1; + } + + watch = zmq_stopwatch_start (); + + for (i = 0; i != message_count - 1; i++) { + rc = zmq_recv (s, &msg, 0); + if (rc != 0) { + printf ("error in zmq_recv: %s\n", zmq_strerror (errno)); + return -1; + } + if (zmq_msg_size (&msg) != message_size) { + printf ("message of incorrect size received\n"); + return -1; + } + } + + elapsed = zmq_stopwatch_stop (watch); + if (elapsed == 0) + elapsed = 1; + + rc = zmq_msg_close (&msg); + if (rc != 0) { + printf ("error in zmq_msg_close: %s\n", zmq_strerror (errno)); + return -1; + } + + throughput = (unsigned long) + ((double) message_count / (double) elapsed * 1000000); + megabits = (double) (throughput * message_size * 8) / 1000000; + + printf ("message size: %d [B]\n", (int) message_size); + printf ("message count: %d\n", (int) message_count); + printf ("mean throughput: %d [msg/s]\n", (int) throughput); + printf ("mean throughput: %.3f [Mb/s]\n", (double) megabits); + + rc = zmq_close (s); + if (rc != 0) { + printf ("error in zmq_close: %s\n", zmq_strerror (errno)); + return -1; + } + + rc = zmq_term (ctx); + if (rc != 0) { + printf ("error in zmq_term: %s\n", zmq_strerror (errno)); + return -1; + } + + return 0; +} diff --git a/perf/remote_lat.c b/perf/remote_lat.c deleted file mode 100644 index 6214ce8..0000000 --- a/perf/remote_lat.c +++ /dev/null @@ -1,119 +0,0 @@ -/* - Copyright (c) 2007-2010 iMatix Corporation - - This file is part of 0MQ. - - 0MQ is free software; you can redistribute it and/or modify it under - the terms of the Lesser GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - 0MQ is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - Lesser GNU General Public License for more details. - - You should have received a copy of the Lesser GNU General Public License - along with this program. If not, see . -*/ - -#include "../include/zmq.h" -#include -#include -#include - -int main (int argc, char *argv []) -{ - const char *connect_to; - int roundtrip_count; - int message_size; - void *ctx; - void *s; - int rc; - int i; - zmq_msg_t msg; - void *watch; - unsigned long elapsed; - double latency; - - if (argc != 4) { - printf ("usage: remote_lat " - "\n"); - return 1; - } - connect_to = argv [1]; - message_size = atoi (argv [2]); - roundtrip_count = atoi (argv [3]); - - ctx = zmq_init (1, 1, 0); - if (!ctx) { - printf ("error in zmq_init: %s\n", zmq_strerror (errno)); - return -1; - } - - s = zmq_socket (ctx, ZMQ_REQ); - if (!s) { - printf ("error in zmq_socket: %s\n", zmq_strerror (errno)); - return -1; - } - - rc = zmq_connect (s, connect_to); - if (rc != 0) { - printf ("error in zmq_connect: %s\n", zmq_strerror (errno)); - return -1; - } - - rc = zmq_msg_init_size (&msg, message_size); - if (rc != 0) { - printf ("error in zmq_msg_init_size: %s\n", zmq_strerror (errno)); - return -1; - } - memset (zmq_msg_data (&msg), 0, message_size); - - watch = zmq_stopwatch_start (); - - for (i = 0; i != roundtrip_count; i++) { - rc = zmq_send (s, &msg, 0); - if (rc != 0) { - printf ("error in zmq_send: %s\n", zmq_strerror (errno)); - return -1; - } - rc = zmq_recv (s, &msg, 0); - if (rc != 0) { - printf ("error in zmq_recv: %s\n", zmq_strerror (errno)); - return -1; - } - if (zmq_msg_size (&msg) != message_size) { - printf ("message of incorrect size received\n"); - return -1; - } - } - - elapsed = zmq_stopwatch_stop (watch); - - rc = zmq_msg_close (&msg); - if (rc != 0) { - printf ("error in zmq_msg_close: %s\n", zmq_strerror (errno)); - return -1; - } - - latency = (double) elapsed / (roundtrip_count * 2); - - printf ("message size: %d [B]\n", (int) message_size); - printf ("roundtrip count: %d\n", (int) roundtrip_count); - printf ("average latency: %.3f [us]\n", (double) latency); - - rc = zmq_close (s); - if (rc != 0) { - printf ("error in zmq_close: %s\n", zmq_strerror (errno)); - return -1; - } - - rc = zmq_term (ctx); - if (rc != 0) { - printf ("error in zmq_term: %s\n", zmq_strerror (errno)); - return -1; - } - - return 0; -} diff --git a/perf/remote_lat.cpp b/perf/remote_lat.cpp new file mode 100644 index 0000000..df18b56 --- /dev/null +++ b/perf/remote_lat.cpp @@ -0,0 +1,119 @@ +/* + Copyright (c) 2007-2010 iMatix Corporation + + This file is part of 0MQ. + + 0MQ is free software; you can redistribute it and/or modify it under + the terms of the Lesser GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + 0MQ is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + Lesser GNU General Public License for more details. + + You should have received a copy of the Lesser GNU General Public License + along with this program. If not, see . +*/ + +#include "../include/zmq.h" +#include +#include +#include + +int main (int argc, char *argv []) +{ + const char *connect_to; + int roundtrip_count; + size_t message_size; + void *ctx; + void *s; + int rc; + int i; + zmq_msg_t msg; + void *watch; + unsigned long elapsed; + double latency; + + if (argc != 4) { + printf ("usage: remote_lat " + "\n"); + return 1; + } + connect_to = argv [1]; + message_size = atoi (argv [2]); + roundtrip_count = atoi (argv [3]); + + ctx = zmq_init (1, 1, 0); + if (!ctx) { + printf ("error in zmq_init: %s\n", zmq_strerror (errno)); + return -1; + } + + s = zmq_socket (ctx, ZMQ_REQ); + if (!s) { + printf ("error in zmq_socket: %s\n", zmq_strerror (errno)); + return -1; + } + + rc = zmq_connect (s, connect_to); + if (rc != 0) { + printf ("error in zmq_connect: %s\n", zmq_strerror (errno)); + return -1; + } + + rc = zmq_msg_init_size (&msg, message_size); + if (rc != 0) { + printf ("error in zmq_msg_init_size: %s\n", zmq_strerror (errno)); + return -1; + } + memset (zmq_msg_data (&msg), 0, message_size); + + watch = zmq_stopwatch_start (); + + for (i = 0; i != roundtrip_count; i++) { + rc = zmq_send (s, &msg, 0); + if (rc != 0) { + printf ("error in zmq_send: %s\n", zmq_strerror (errno)); + return -1; + } + rc = zmq_recv (s, &msg, 0); + if (rc != 0) { + printf ("error in zmq_recv: %s\n", zmq_strerror (errno)); + return -1; + } + if (zmq_msg_size (&msg) != message_size) { + printf ("message of incorrect size received\n"); + return -1; + } + } + + elapsed = zmq_stopwatch_stop (watch); + + rc = zmq_msg_close (&msg); + if (rc != 0) { + printf ("error in zmq_msg_close: %s\n", zmq_strerror (errno)); + return -1; + } + + latency = (double) elapsed / (roundtrip_count * 2); + + printf ("message size: %d [B]\n", (int) message_size); + printf ("roundtrip count: %d\n", (int) roundtrip_count); + printf ("average latency: %.3f [us]\n", (double) latency); + + rc = zmq_close (s); + if (rc != 0) { + printf ("error in zmq_close: %s\n", zmq_strerror (errno)); + return -1; + } + + rc = zmq_term (ctx); + if (rc != 0) { + printf ("error in zmq_term: %s\n", zmq_strerror (errno)); + return -1; + } + + return 0; +} diff --git a/perf/remote_thr.c b/perf/remote_thr.c deleted file mode 100644 index 1ddee4b..0000000 --- a/perf/remote_thr.c +++ /dev/null @@ -1,98 +0,0 @@ -/* - Copyright (c) 2007-2010 iMatix Corporation - - This file is part of 0MQ. - - 0MQ is free software; you can redistribute it and/or modify it under - the terms of the Lesser GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - 0MQ is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - Lesser GNU General Public License for more details. - - You should have received a copy of the Lesser GNU General Public License - along with this program. If not, see . -*/ - -#include "../include/zmq.h" -#include -#include - -int main (int argc, char *argv []) -{ - const char *connect_to; - int message_count; - int message_size; - void *ctx; - void *s; - int rc; - int i; - zmq_msg_t msg; - - if (argc != 4) { - printf ("usage: remote_thr " - "\n"); - return 1; - } - connect_to = argv [1]; - message_size = atoi (argv [2]); - message_count = atoi (argv [3]); - - ctx = zmq_init (1, 1, 0); - if (!ctx) { - printf ("error in zmq_recv: %s\n", zmq_strerror (errno)); - return -1; - } - - s = zmq_socket (ctx, ZMQ_PUB); - if (!s) { - printf ("error in zmq_socket: %s\n", zmq_strerror (errno)); - return -1; - } - - // Add your socket options here. - // For example ZMQ_RATE, ZMQ_RECOVERY_IVL and ZMQ_MCAST_LOOP for PGM. - - rc = zmq_connect (s, connect_to); - if (rc != 0) { - printf ("error in zmq_connect: %s\n", zmq_strerror (errno)); - return -1; - } - - for (i = 0; i != message_count; i++) { - rc = zmq_msg_init_size (&msg, message_size); - if (rc != 0) { - printf ("error in zmq_msg_init_size: %s\n", zmq_strerror (errno)); - return -1; - } - rc = zmq_send (s, &msg, 0); - if (rc != 0) { - printf ("error in zmq_send: %s\n", zmq_strerror (errno)); - return -1; - } - rc = zmq_msg_close (&msg); - if (rc != 0) { - printf ("error in zmq_msg_close: %s\n", zmq_strerror (errno)); - return -1; - } - } - - zmq_sleep (10); - - rc = zmq_close (s); - if (rc != 0) { - printf ("error in zmq_close: %s\n", zmq_strerror (errno)); - return -1; - } - - rc = zmq_term (ctx); - if (rc != 0) { - printf ("error in zmq_term: %s\n", zmq_strerror (errno)); - return -1; - } - - return 0; -} diff --git a/perf/remote_thr.cpp b/perf/remote_thr.cpp new file mode 100644 index 0000000..1ddee4b --- /dev/null +++ b/perf/remote_thr.cpp @@ -0,0 +1,98 @@ +/* + Copyright (c) 2007-2010 iMatix Corporation + + This file is part of 0MQ. + + 0MQ is free software; you can redistribute it and/or modify it under + the terms of the Lesser GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + 0MQ is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + Lesser GNU General Public License for more details. + + You should have received a copy of the Lesser GNU General Public License + along with this program. If not, see . +*/ + +#include "../include/zmq.h" +#include +#include + +int main (int argc, char *argv []) +{ + const char *connect_to; + int message_count; + int message_size; + void *ctx; + void *s; + int rc; + int i; + zmq_msg_t msg; + + if (argc != 4) { + printf ("usage: remote_thr " + "\n"); + return 1; + } + connect_to = argv [1]; + message_size = atoi (argv [2]); + message_count = atoi (argv [3]); + + ctx = zmq_init (1, 1, 0); + if (!ctx) { + printf ("error in zmq_recv: %s\n", zmq_strerror (errno)); + return -1; + } + + s = zmq_socket (ctx, ZMQ_PUB); + if (!s) { + printf ("error in zmq_socket: %s\n", zmq_strerror (errno)); + return -1; + } + + // Add your socket options here. + // For example ZMQ_RATE, ZMQ_RECOVERY_IVL and ZMQ_MCAST_LOOP for PGM. + + rc = zmq_connect (s, connect_to); + if (rc != 0) { + printf ("error in zmq_connect: %s\n", zmq_strerror (errno)); + return -1; + } + + for (i = 0; i != message_count; i++) { + rc = zmq_msg_init_size (&msg, message_size); + if (rc != 0) { + printf ("error in zmq_msg_init_size: %s\n", zmq_strerror (errno)); + return -1; + } + rc = zmq_send (s, &msg, 0); + if (rc != 0) { + printf ("error in zmq_send: %s\n", zmq_strerror (errno)); + return -1; + } + rc = zmq_msg_close (&msg); + if (rc != 0) { + printf ("error in zmq_msg_close: %s\n", zmq_strerror (errno)); + return -1; + } + } + + zmq_sleep (10); + + rc = zmq_close (s); + if (rc != 0) { + printf ("error in zmq_close: %s\n", zmq_strerror (errno)); + return -1; + } + + rc = zmq_term (ctx); + if (rc != 0) { + printf ("error in zmq_term: %s\n", zmq_strerror (errno)); + return -1; + } + + return 0; +} -- cgit v1.2.3