remote_lat.cpp
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MPL-2.0 */
2 
3 #include "../include/zmq.h"
4 #include <stdio.h>
5 #include <stdlib.h>
6 #include <string.h>
7 
8 int main (int argc, char *argv[])
9 {
10  const char *connect_to;
11  int roundtrip_count;
12  size_t message_size;
13  void *ctx;
14  void *s;
15  int rc;
16  int i;
17  zmq_msg_t msg;
18  void *watch;
19  unsigned long elapsed;
20  double latency;
21 
22  if (argc != 4) {
23  printf ("usage: remote_lat <connect-to> <message-size> "
24  "<roundtrip-count>\n");
25  return 1;
26  }
27  connect_to = argv[1];
28  message_size = atoi (argv[2]);
29  roundtrip_count = atoi (argv[3]);
30 
31  ctx = zmq_init (1);
32  if (!ctx) {
33  printf ("error in zmq_init: %s\n", zmq_strerror (errno));
34  return -1;
35  }
36 
37  s = zmq_socket (ctx, ZMQ_REQ);
38  if (!s) {
39  printf ("error in zmq_socket: %s\n", zmq_strerror (errno));
40  return -1;
41  }
42 
43  rc = zmq_connect (s, connect_to);
44  if (rc != 0) {
45  printf ("error in zmq_connect: %s\n", zmq_strerror (errno));
46  return -1;
47  }
48 
49  rc = zmq_msg_init_size (&msg, message_size);
50  if (rc != 0) {
51  printf ("error in zmq_msg_init_size: %s\n", zmq_strerror (errno));
52  return -1;
53  }
54  memset (zmq_msg_data (&msg), 0, message_size);
55 
56  watch = zmq_stopwatch_start ();
57 
58  for (i = 0; i != roundtrip_count; i++) {
59  rc = zmq_sendmsg (s, &msg, 0);
60  if (rc < 0) {
61  printf ("error in zmq_sendmsg: %s\n", zmq_strerror (errno));
62  return -1;
63  }
64  rc = zmq_recvmsg (s, &msg, 0);
65  if (rc < 0) {
66  printf ("error in zmq_recvmsg: %s\n", zmq_strerror (errno));
67  return -1;
68  }
69  if (zmq_msg_size (&msg) != message_size) {
70  printf ("message of incorrect size received\n");
71  return -1;
72  }
73  }
74 
75  elapsed = zmq_stopwatch_stop (watch);
76 
77  rc = zmq_msg_close (&msg);
78  if (rc != 0) {
79  printf ("error in zmq_msg_close: %s\n", zmq_strerror (errno));
80  return -1;
81  }
82 
83  latency = (double) elapsed / (roundtrip_count * 2);
84 
85  printf ("message size: %d [B]\n", (int) message_size);
86  printf ("roundtrip count: %d\n", (int) roundtrip_count);
87  printf ("average latency: %.3f [us]\n", (double) latency);
88 
89  rc = zmq_close (s);
90  if (rc != 0) {
91  printf ("error in zmq_close: %s\n", zmq_strerror (errno));
92  return -1;
93  }
94 
95  rc = zmq_ctx_term (ctx);
96  if (rc != 0) {
97  printf ("error in zmq_ctx_term: %s\n", zmq_strerror (errno));
98  return -1;
99  }
100 
101  return 0;
102 }
zmq_strerror
const ZMQ_EXPORT char * zmq_strerror(int errnum_)
Definition: zmq.cpp:96
s
XmlRpcServer s
zmq_sendmsg
ZMQ_EXPORT int zmq_sendmsg(void *s_, zmq_msg_t *msg_, int flags_)
Definition: zmq.cpp:372
errno
int errno
ZMQ_REQ
#define ZMQ_REQ
Definition: zmq.h:261
zmq_msg_data
ZMQ_EXPORT void * zmq_msg_data(zmq_msg_t *msg_)
Definition: zmq.cpp:642
zmq_connect
ZMQ_EXPORT int zmq_connect(void *s_, const char *addr_)
Definition: zmq.cpp:307
zmq_msg_size
ZMQ_EXPORT size_t zmq_msg_size(const zmq_msg_t *msg_)
Definition: zmq.cpp:647
message_size
static size_t message_size
Definition: inproc_lat.cpp:18
roundtrip_count
static int roundtrip_count
Definition: inproc_lat.cpp:19
zmq_stopwatch_start
ZMQ_EXPORT void * zmq_stopwatch_start(void)
Definition: zmq_utils.cpp:32
zmq_msg_t
Definition: zmq.h:218
zmq_socket
ZMQ_EXPORT void * zmq_socket(void *, int type_)
Definition: zmq.cpp:230
zmq_close
ZMQ_EXPORT int zmq_close(void *s_)
Definition: zmq.cpp:241
i
int i
Definition: gmock-matchers_test.cc:764
zmq_recvmsg
ZMQ_EXPORT int zmq_recvmsg(void *s_, zmq_msg_t *msg_, int flags_)
Definition: zmq.cpp:481
zmq_msg_init_size
ZMQ_EXPORT int zmq_msg_init_size(zmq_msg_t *msg_, size_t size_)
Definition: zmq.cpp:592
zmq_init
ZMQ_EXPORT void * zmq_init(int io_threads_)
Definition: zmq.cpp:196
main
int main(int argc, char *argv[])
Definition: remote_lat.cpp:8
zmq_ctx_term
ZMQ_EXPORT int zmq_ctx_term(void *context_)
Definition: zmq.cpp:128
zmq_msg_close
ZMQ_EXPORT int zmq_msg_close(zmq_msg_t *msg_)
Definition: zmq.cpp:625
zmq_stopwatch_stop
ZMQ_EXPORT unsigned long zmq_stopwatch_stop(void *watch_)
Definition: zmq_utils.cpp:47


libaditof
Author(s):
autogenerated on Wed May 21 2025 02:06:58