rbczmq 1.7.4 → 1.7.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (99) hide show
  1. checksums.yaml +5 -13
  2. data/.travis.yml +4 -1
  3. data/CHANGELOG.rdoc +13 -0
  4. data/Gemfile +8 -1
  5. data/Gemfile.lock +211 -2
  6. data/README.rdoc +7 -4
  7. data/ext/rbczmq/beacon.c +6 -3
  8. data/ext/rbczmq/context.c +117 -8
  9. data/ext/rbczmq/context.h +5 -0
  10. data/ext/rbczmq/message.c +6 -4
  11. data/ext/rbczmq/poller.c +12 -5
  12. data/ext/rbczmq/rbczmq_ext.c +2 -0
  13. data/ext/rbczmq/rbczmq_ext.h +1 -0
  14. data/ext/rbczmq/socket.c +135 -59
  15. data/ext/rbczmq/socket.h +2 -0
  16. data/ext/zeromq/CMakeLists.txt +3 -1
  17. data/ext/zeromq/NEWS +28 -3
  18. data/ext/zeromq/doc/zmq.txt +3 -3
  19. data/ext/zeromq/doc/zmq_getsockopt.txt +3 -3
  20. data/ext/zeromq/doc/zmq_msg_get.txt +2 -1
  21. data/ext/zeromq/doc/zmq_msg_more.txt +1 -1
  22. data/ext/zeromq/doc/zmq_setsockopt.txt +18 -19
  23. data/ext/zeromq/doc/zmq_socket.txt +4 -0
  24. data/ext/zeromq/include/zmq.h +14 -18
  25. data/ext/zeromq/src/clock.cpp +57 -2
  26. data/ext/zeromq/src/ctx.cpp +11 -5
  27. data/ext/zeromq/src/devpoll.cpp +5 -0
  28. data/ext/zeromq/src/devpoll.hpp +2 -0
  29. data/ext/zeromq/src/epoll.cpp +5 -0
  30. data/ext/zeromq/src/epoll.hpp +2 -0
  31. data/ext/zeromq/src/i_engine.hpp +2 -2
  32. data/ext/zeromq/src/kqueue.cpp +5 -0
  33. data/ext/zeromq/src/kqueue.hpp +2 -0
  34. data/ext/zeromq/src/pgm_receiver.cpp +2 -2
  35. data/ext/zeromq/src/pgm_receiver.hpp +2 -2
  36. data/ext/zeromq/src/pgm_sender.cpp +2 -2
  37. data/ext/zeromq/src/pgm_sender.hpp +2 -2
  38. data/ext/zeromq/src/poll.cpp +5 -0
  39. data/ext/zeromq/src/poll.hpp +2 -0
  40. data/ext/zeromq/src/router.cpp +2 -0
  41. data/ext/zeromq/src/select.cpp +5 -0
  42. data/ext/zeromq/src/select.hpp +2 -0
  43. data/ext/zeromq/src/session_base.cpp +2 -2
  44. data/ext/zeromq/src/signaler.cpp +73 -99
  45. data/ext/zeromq/src/signaler.hpp +2 -2
  46. data/ext/zeromq/src/socket_base.cpp +42 -40
  47. data/ext/zeromq/src/stream_engine.cpp +60 -58
  48. data/ext/zeromq/src/stream_engine.hpp +7 -8
  49. data/ext/zeromq/src/zmq_utils.cpp +6 -5
  50. data/ext/zeromq/tests/Makefile.am +6 -5
  51. data/ext/zeromq/tests/test_conflate.cpp +2 -5
  52. data/ext/zeromq/tests/test_ctx_destroy.cpp +1 -1
  53. data/ext/zeromq/tests/test_ctx_options.cpp +1 -1
  54. data/ext/zeromq/tests/test_immediate.cpp +1 -2
  55. data/ext/zeromq/tests/test_inproc_connect.cpp +1 -1
  56. data/ext/zeromq/tests/test_iov.cpp +1 -1
  57. data/ext/zeromq/tests/test_many_sockets.cpp +90 -0
  58. data/ext/zeromq/tests/test_monitor.cpp +3 -3
  59. data/ext/zeromq/tests/test_req_relaxed.cpp +1 -1
  60. data/ext/zeromq/tests/test_router_raw_empty.cpp +65 -0
  61. data/ext/zeromq/tests/test_spec_req.cpp +1 -1
  62. data/ext/zeromq/tests/test_stream.cpp +6 -7
  63. data/ext/zeromq/tests/test_sub_forward.cpp +1 -1
  64. data/ext/zeromq/tests/test_term_endpoint.cpp +2 -2
  65. data/ext/zeromq/tests/testutil.hpp +18 -1
  66. data/ext/zeromq/tools/Makefile.am +1 -1
  67. data/lib/zmq/socket.rb +1 -0
  68. data/lib/zmq/socket/stream.rb +44 -0
  69. data/lib/zmq/version.rb +1 -1
  70. data/test/socket/test_dealer_socket.rb +1 -1
  71. data/test/socket/test_pair_socket.rb +1 -1
  72. data/test/socket/test_pair_sockets.rb +1 -1
  73. data/test/socket/test_pub_socket.rb +1 -1
  74. data/test/socket/test_pub_sub_sockets.rb +1 -1
  75. data/test/socket/test_pull_socket.rb +1 -1
  76. data/test/socket/test_push_pull_sockets.rb +1 -1
  77. data/test/socket/test_push_socket.rb +1 -1
  78. data/test/socket/test_rep_socket.rb +1 -1
  79. data/test/socket/test_req_rep_sockets.rb +1 -1
  80. data/test/socket/test_req_socket.rb +1 -1
  81. data/test/socket/test_router_socket.rb +1 -1
  82. data/test/socket/test_routing.rb +1 -1
  83. data/test/socket/test_stream_socket.rb +74 -0
  84. data/test/socket/test_sub_socket.rb +1 -1
  85. data/test/test_beacon.rb +4 -2
  86. data/test/test_context.rb +2 -2
  87. data/test/test_frame.rb +2 -2
  88. data/test/test_handler.rb +2 -2
  89. data/test/test_logger.rb +1 -1
  90. data/test/test_loop.rb +2 -2
  91. data/test/test_message.rb +1 -1
  92. data/test/test_monitoring.rb +15 -3
  93. data/test/test_poller.rb +2 -2
  94. data/test/test_pollitem.rb +2 -2
  95. data/test/test_socket.rb +53 -6
  96. data/test/test_threading.rb +2 -2
  97. data/test/test_timer.rb +2 -2
  98. data/test/test_zmq.rb +2 -2
  99. metadata +109 -104
@@ -58,7 +58,8 @@ namespace zmq
58
58
  // to pass the signals.
59
59
  static int make_fdpair (fd_t *r_, fd_t *w_);
60
60
 
61
- // Underlying write & read file descriptor.
61
+ // Underlying write & read file descriptor
62
+ // Will be -1 if we exceeded number of available handles
62
63
  fd_t w;
63
64
  fd_t r;
64
65
 
@@ -74,7 +75,6 @@ namespace zmq
74
75
  void close_internal();
75
76
  #endif
76
77
  };
77
-
78
78
  }
79
79
 
80
80
  #endif
@@ -79,47 +79,49 @@ zmq::socket_base_t *zmq::socket_base_t::create (int type_, class ctx_t *parent_,
79
79
  {
80
80
  socket_base_t *s = NULL;
81
81
  switch (type_) {
82
-
83
- case ZMQ_PAIR:
84
- s = new (std::nothrow) pair_t (parent_, tid_, sid_);
85
- break;
86
- case ZMQ_PUB:
87
- s = new (std::nothrow) pub_t (parent_, tid_, sid_);
88
- break;
89
- case ZMQ_SUB:
90
- s = new (std::nothrow) sub_t (parent_, tid_, sid_);
91
- break;
92
- case ZMQ_REQ:
93
- s = new (std::nothrow) req_t (parent_, tid_, sid_);
94
- break;
95
- case ZMQ_REP:
96
- s = new (std::nothrow) rep_t (parent_, tid_, sid_);
97
- break;
98
- case ZMQ_DEALER:
99
- s = new (std::nothrow) dealer_t (parent_, tid_, sid_);
100
- break;
101
- case ZMQ_ROUTER:
102
- s = new (std::nothrow) router_t (parent_, tid_, sid_);
103
- break;
104
- case ZMQ_PULL:
105
- s = new (std::nothrow) pull_t (parent_, tid_, sid_);
106
- break;
107
- case ZMQ_PUSH:
108
- s = new (std::nothrow) push_t (parent_, tid_, sid_);
109
- break;
110
- case ZMQ_XPUB:
111
- s = new (std::nothrow) xpub_t (parent_, tid_, sid_);
112
- break;
113
- case ZMQ_XSUB:
114
- s = new (std::nothrow) xsub_t (parent_, tid_, sid_);
115
- break;
116
- case ZMQ_STREAM:
117
- s = new (std::nothrow) stream_t (parent_, tid_, sid_);
118
- break;
119
- default:
120
- errno = EINVAL;
121
- return NULL;
82
+ case ZMQ_PAIR:
83
+ s = new (std::nothrow) pair_t (parent_, tid_, sid_);
84
+ break;
85
+ case ZMQ_PUB:
86
+ s = new (std::nothrow) pub_t (parent_, tid_, sid_);
87
+ break;
88
+ case ZMQ_SUB:
89
+ s = new (std::nothrow) sub_t (parent_, tid_, sid_);
90
+ break;
91
+ case ZMQ_REQ:
92
+ s = new (std::nothrow) req_t (parent_, tid_, sid_);
93
+ break;
94
+ case ZMQ_REP:
95
+ s = new (std::nothrow) rep_t (parent_, tid_, sid_);
96
+ break;
97
+ case ZMQ_DEALER:
98
+ s = new (std::nothrow) dealer_t (parent_, tid_, sid_);
99
+ break;
100
+ case ZMQ_ROUTER:
101
+ s = new (std::nothrow) router_t (parent_, tid_, sid_);
102
+ break;
103
+ case ZMQ_PULL:
104
+ s = new (std::nothrow) pull_t (parent_, tid_, sid_);
105
+ break;
106
+ case ZMQ_PUSH:
107
+ s = new (std::nothrow) push_t (parent_, tid_, sid_);
108
+ break;
109
+ case ZMQ_XPUB:
110
+ s = new (std::nothrow) xpub_t (parent_, tid_, sid_);
111
+ break;
112
+ case ZMQ_XSUB:
113
+ s = new (std::nothrow) xsub_t (parent_, tid_, sid_);
114
+ break;
115
+ case ZMQ_STREAM:
116
+ s = new (std::nothrow) stream_t (parent_, tid_, sid_);
117
+ break;
118
+ default:
119
+ errno = EINVAL;
120
+ return NULL;
122
121
  }
122
+ if (s->mailbox.get_fd () == -1)
123
+ return NULL;
124
+
123
125
  alloc_assert (s);
124
126
  return s;
125
127
  }
@@ -74,8 +74,8 @@ zmq::stream_engine_t::stream_engine_t (fd_t fd_, const options_t &options_,
74
74
  io_error (false),
75
75
  subscription_required (false),
76
76
  mechanism (NULL),
77
- input_paused (false),
78
- output_paused (false),
77
+ input_stopped (false),
78
+ output_stopped (false),
79
79
  socket (NULL)
80
80
  {
81
81
  int rc = tx_msg.init ();
@@ -204,7 +204,7 @@ void zmq::stream_engine_t::in_event ()
204
204
  zmq_assert (decoder);
205
205
 
206
206
  // If there has been an I/O error, stop polling.
207
- if (input_paused) {
207
+ if (input_stopped) {
208
208
  rm_fd (handle);
209
209
  io_error = true;
210
210
  return;
@@ -217,17 +217,22 @@ void zmq::stream_engine_t::in_event ()
217
217
  // Note that buffer can be arbitrarily large. However, we assume
218
218
  // the underlying TCP layer has fixed buffer size and thus the
219
219
  // number of bytes read will be always limited.
220
- decoder->get_buffer (&inpos, &insize);
221
- const int bytes_read = read (inpos, insize);
220
+ size_t bufsize = 0;
221
+ decoder->get_buffer (&inpos, &bufsize);
222
222
 
223
- // Check whether the peer has closed the connection.
224
- if (bytes_read == -1) {
223
+ int const rc = read (inpos, bufsize);
224
+ if (rc == 0) {
225
225
  error ();
226
226
  return;
227
227
  }
228
+ if (rc == -1) {
229
+ if (errno != EAGAIN)
230
+ error ();
231
+ return;
232
+ }
228
233
 
229
234
  // Adjust input size
230
- insize = static_cast <size_t> (bytes_read);
235
+ insize = static_cast <size_t> (rc);
231
236
  }
232
237
 
233
238
  int rc = 0;
@@ -252,7 +257,7 @@ void zmq::stream_engine_t::in_event ()
252
257
  error ();
253
258
  return;
254
259
  }
255
- input_paused = true;
260
+ input_stopped = true;
256
261
  reset_pollin (handle);
257
262
  }
258
263
 
@@ -291,7 +296,7 @@ void zmq::stream_engine_t::out_event ()
291
296
 
292
297
  // If there is no data to send, stop polling for output.
293
298
  if (outsize == 0) {
294
- output_paused = true;
299
+ output_stopped = true;
295
300
  reset_pollout (handle);
296
301
  return;
297
302
  }
@@ -328,14 +333,14 @@ void zmq::stream_engine_t::out_event ()
328
333
  terminate ();
329
334
  }
330
335
 
331
- void zmq::stream_engine_t::activate_out ()
336
+ void zmq::stream_engine_t::restart_output ()
332
337
  {
333
338
  if (unlikely (io_error))
334
339
  return;
335
340
 
336
- if (likely (output_paused)) {
341
+ if (likely (output_stopped)) {
337
342
  set_pollout (handle);
338
- output_paused = false;
343
+ output_stopped = false;
339
344
  }
340
345
 
341
346
  // Speculative write: The assumption is that at the moment new message
@@ -345,9 +350,9 @@ void zmq::stream_engine_t::activate_out ()
345
350
  out_event ();
346
351
  }
347
352
 
348
- void zmq::stream_engine_t::activate_in ()
353
+ void zmq::stream_engine_t::restart_input ()
349
354
  {
350
- zmq_assert (input_paused);
355
+ zmq_assert (input_stopped);
351
356
  zmq_assert (session != NULL);
352
357
  zmq_assert (decoder != NULL);
353
358
 
@@ -379,7 +384,7 @@ void zmq::stream_engine_t::activate_in ()
379
384
  if (rc == -1 || io_error)
380
385
  error ();
381
386
  else {
382
- input_paused = false;
387
+ input_stopped = false;
383
388
  set_pollin (handle);
384
389
  session->flush ();
385
390
 
@@ -396,12 +401,15 @@ bool zmq::stream_engine_t::handshake ()
396
401
  while (greeting_bytes_read < greeting_size) {
397
402
  const int n = read (greeting_recv + greeting_bytes_read,
398
403
  greeting_size - greeting_bytes_read);
399
- if (n == -1) {
404
+ if (n == 0) {
400
405
  error ();
401
406
  return false;
402
407
  }
403
- if (n == 0)
408
+ if (n == -1) {
409
+ if (errno != EAGAIN)
410
+ error ();
404
411
  return false;
412
+ }
405
413
 
406
414
  greeting_bytes_read += n;
407
415
 
@@ -480,6 +488,13 @@ bool zmq::stream_engine_t::handshake ()
480
488
  // header data away.
481
489
  const size_t header_size = options.identity_size + 1 >= 255 ? 10 : 2;
482
490
  unsigned char tmp [10], *bufferp = tmp;
491
+
492
+ // Prepare the identity message and load it into encoder.
493
+ // Then consume bytes we have already sent to the peer.
494
+ const int rc = tx_msg.init_size (options.identity_size);
495
+ zmq_assert (rc == 0);
496
+ memcpy (tx_msg.data (), options.identity, options.identity_size);
497
+ encoder->load_msg (&tx_msg);
483
498
  size_t buffer_size = encoder->encode (&bufferp, header_size);
484
499
  zmq_assert (buffer_size == header_size);
485
500
 
@@ -614,8 +629,8 @@ int zmq::stream_engine_t::process_handshake_command (msg_t *msg_)
614
629
  if (rc == 0) {
615
630
  if (mechanism->is_handshake_complete ())
616
631
  mechanism_ready ();
617
- if (output_paused)
618
- activate_out ();
632
+ if (output_stopped)
633
+ restart_output ();
619
634
  }
620
635
 
621
636
  return rc;
@@ -630,10 +645,10 @@ void zmq::stream_engine_t::zap_msg_available ()
630
645
  error ();
631
646
  return;
632
647
  }
633
- if (input_paused)
634
- activate_in ();
635
- if (output_paused)
636
- activate_out ();
648
+ if (input_stopped)
649
+ restart_input ();
650
+ if (output_stopped)
651
+ restart_output ();
637
652
  }
638
653
 
639
654
  void zmq::stream_engine_t::mechanism_ready ()
@@ -785,58 +800,45 @@ int zmq::stream_engine_t::read (void *data_, size_t size_)
785
800
  {
786
801
  #ifdef ZMQ_HAVE_WINDOWS
787
802
 
788
- int nbytes = recv (s, (char*) data_, (int) size_, 0);
803
+ const int rc = recv (s, (char*) data_, (int) size_, 0);
789
804
 
790
805
  // If not a single byte can be read from the socket in non-blocking mode
791
806
  // we'll get an error (this may happen during the speculative read).
792
- if (nbytes == SOCKET_ERROR && WSAGetLastError () == WSAEWOULDBLOCK)
793
- return 0;
794
-
795
- // Connection failure.
796
- if (nbytes == SOCKET_ERROR && (
797
- WSAGetLastError () == WSAENETDOWN ||
798
- WSAGetLastError () == WSAENETRESET ||
799
- WSAGetLastError () == WSAECONNABORTED ||
800
- WSAGetLastError () == WSAETIMEDOUT ||
801
- WSAGetLastError () == WSAECONNRESET ||
802
- WSAGetLastError () == WSAECONNREFUSED ||
803
- WSAGetLastError () == WSAENOTCONN))
804
- return -1;
805
-
806
- wsa_assert (nbytes != SOCKET_ERROR);
807
-
808
- // Orderly shutdown by the other peer.
809
- if (nbytes == 0)
810
- return -1;
807
+ if (rc == SOCKET_ERROR) {
808
+ if (WSAGetLastError () == WSAEWOULDBLOCK)
809
+ errno = EAGAIN;
810
+ else {
811
+ wsa_assert (WSAGetLastError () == WSAENETDOWN
812
+ || WSAGetLastError () == WSAENETRESET
813
+ || WSAGetLastError () == WSAECONNABORTED
814
+ || WSAGetLastError () == WSAETIMEDOUT
815
+ || WSAGetLastError () == WSAECONNRESET
816
+ || WSAGetLastError () == WSAECONNREFUSED
817
+ || WSAGetLastError () == WSAENOTCONN);
818
+ errno = wsa_error_to_errno (WSAGetLastError ());
819
+ }
820
+ }
811
821
 
812
- return nbytes;
822
+ return rc == SOCKET_ERROR? -1: rc;
813
823
 
814
824
  #else
815
825
 
816
- ssize_t nbytes = recv (s, data_, size_, 0);
826
+ const ssize_t rc = recv (s, data_, size_, 0);
817
827
 
818
828
  // Several errors are OK. When speculative read is being done we may not
819
829
  // be able to read a single byte from the socket. Also, SIGSTOP issued
820
830
  // by a debugging tool can result in EINTR error.
821
- if (nbytes == -1 && (errno == EAGAIN || errno == EWOULDBLOCK ||
822
- errno == EINTR))
823
- return 0;
824
-
825
- // Signalise peer failure.
826
- if (nbytes == -1) {
831
+ if (rc == -1) {
827
832
  errno_assert (errno != EBADF
828
833
  && errno != EFAULT
829
834
  && errno != EINVAL
830
835
  && errno != ENOMEM
831
836
  && errno != ENOTSOCK);
832
- return -1;
837
+ if (errno == EWOULDBLOCK || errno == EINTR)
838
+ errno = EAGAIN;
833
839
  }
834
840
 
835
- // Orderly shutdown by the peer.
836
- if (nbytes == 0)
837
- return -1;
838
-
839
- return static_cast <int> (nbytes);
841
+ return static_cast <int> (rc);
840
842
 
841
843
  #endif
842
844
  }
@@ -60,8 +60,8 @@ namespace zmq
60
60
  void plug (zmq::io_thread_t *io_thread_,
61
61
  zmq::session_base_t *session_);
62
62
  void terminate ();
63
- void activate_in ();
64
- void activate_out ();
63
+ void restart_input ();
64
+ void restart_output ();
65
65
  void zap_msg_available ();
66
66
 
67
67
  // i_poll_events interface implementation.
@@ -87,10 +87,9 @@ namespace zmq
87
87
  // of error or orderly shutdown by the other peer -1 is returned.
88
88
  int write (const void *data_, size_t size_);
89
89
 
90
- // Reads data from the socket (up to 'size' bytes). Returns the number
91
- // of bytes actually read (even zero is to be considered to be
92
- // a success). In case of error or orderly shutdown by the other
93
- // peer -1 is returned.
90
+ // Reads data from the socket (up to 'size' bytes).
91
+ // Returns the number of bytes actually read or -1 on error.
92
+ // Zero indicates the peer has closed the connection.
94
93
  int read (void *data_, size_t size_);
95
94
 
96
95
  int read_identity (msg_t *msg_);
@@ -179,10 +178,10 @@ namespace zmq
179
178
  mechanism_t *mechanism;
180
179
 
181
180
  // True iff the engine couldn't consume the last decoded message.
182
- bool input_paused;
181
+ bool input_stopped;
183
182
 
184
183
  // True iff the engine doesn't have any message to encode.
185
- bool output_paused;
184
+ bool output_stopped;
186
185
 
187
186
  // Socket
188
187
  zmq::socket_base_t *socket;
@@ -142,15 +142,15 @@ char *zmq_z85_encode (char *dest, uint8_t *data, size_t size)
142
142
 
143
143
  uint8_t *zmq_z85_decode (uint8_t *dest, char *string)
144
144
  {
145
-
146
145
  if (strlen (string) % 5 != 0) {
147
146
  errno = EINVAL;
148
147
  return NULL;
149
148
  }
150
149
  unsigned int byte_nbr = 0;
151
150
  unsigned int char_nbr = 0;
151
+ unsigned int string_len = strlen (string);
152
152
  uint32_t value = 0;
153
- while (char_nbr < strlen (string)) {
153
+ while (char_nbr < string_len) {
154
154
  // Accumulate value in base 85
155
155
  value = value * 85 + decoder [(uint8_t) string [char_nbr++] - 32];
156
156
  if (char_nbr % 5 == 0) {
@@ -173,7 +173,7 @@ uint8_t *zmq_z85_decode (uint8_t *dest, char *string)
173
173
  // Returns 0 on success, -1 on failure, setting errno.
174
174
  // Sets errno = ENOTSUP in the absence of libsodium.
175
175
 
176
- int zmq_curve_keypair (char* z85_public_key, char *z85_secret_key)
176
+ int zmq_curve_keypair (char *z85_public_key, char *z85_secret_key)
177
177
  {
178
178
  #ifdef HAVE_LIBSODIUM
179
179
  # if crypto_box_PUBLICKEYBYTES != 32 \
@@ -185,8 +185,9 @@ int zmq_curve_keypair (char* z85_public_key, char *z85_secret_key)
185
185
  uint8_t secret_key [32];
186
186
 
187
187
  int rc = crypto_box_keypair (public_key, secret_key);
188
- // is there a sensible errno to set here?
189
- if (rc) return rc;
188
+ // Is there a sensible errno to set here?
189
+ if (rc)
190
+ return rc;
190
191
 
191
192
  zmq_z85_encode (z85_public_key, public_key, 32);
192
193
  zmq_z85_encode (z85_secret_key, secret_key, 32);
@@ -17,9 +17,9 @@ noinst_PROGRAMS = test_system \
17
17
  test_immediate \
18
18
  test_last_endpoint \
19
19
  test_term_endpoint \
20
- test_linger \
21
20
  test_monitor \
22
21
  test_router_mandatory \
22
+ test_router_raw_empty \
23
23
  test_probe_router \
24
24
  test_stream \
25
25
  test_disconnect_inproc \
@@ -39,7 +39,8 @@ noinst_PROGRAMS = test_system \
39
39
  test_conflate \
40
40
  test_inproc_connect \
41
41
  test_issue_566 \
42
- test_abstract_ipc
42
+ test_abstract_ipc \
43
+ test_many_sockets
43
44
 
44
45
  if !ON_MINGW
45
46
  noinst_PROGRAMS += test_shutdown_stress \
@@ -58,7 +59,6 @@ test_hwm_SOURCES = test_hwm.cpp
58
59
  test_reqrep_device_SOURCES = test_reqrep_device.cpp
59
60
  test_sub_forward_SOURCES = test_sub_forward.cpp
60
61
  test_invalid_rep_SOURCES = test_invalid_rep.cpp
61
- test_linger_SOURCES = test_linger.cpp
62
62
  test_msg_flags_SOURCES = test_msg_flags.cpp
63
63
  test_connect_resolve_SOURCES = test_connect_resolve.cpp
64
64
  test_immediate_SOURCES = test_immediate.cpp
@@ -66,6 +66,7 @@ test_last_endpoint_SOURCES = test_last_endpoint.cpp
66
66
  test_term_endpoint_SOURCES = test_term_endpoint.cpp
67
67
  test_monitor_SOURCES = test_monitor.cpp
68
68
  test_router_mandatory_SOURCES = test_router_mandatory.cpp
69
+ test_router_raw_empty_SOURCES = test_router_raw_empty.cpp
69
70
  test_probe_router_SOURCES = test_probe_router.cpp
70
71
  test_stream_SOURCES = test_stream.cpp
71
72
  test_disconnect_inproc_SOURCES = test_disconnect_inproc.cpp
@@ -86,6 +87,7 @@ test_conflate_SOURCES = test_conflate.cpp
86
87
  test_inproc_connect_SOURCES = test_inproc_connect.cpp
87
88
  test_issue_566_SOURCES = test_issue_566.cpp
88
89
  test_abstract_ipc_SOURCES = test_abstract_ipc.cpp
90
+ test_many_sockets_SOURCES = test_many_sockets.cpp
89
91
  if !ON_MINGW
90
92
  test_shutdown_stress_SOURCES = test_shutdown_stress.cpp
91
93
  test_pair_ipc_SOURCES = test_pair_ipc.cpp testutil.hpp
@@ -96,8 +98,7 @@ endif
96
98
 
97
99
  # Run the test cases
98
100
  TESTS = $(noinst_PROGRAMS)
99
- XFAIL_TESTS = test_linger
100
101
 
101
102
  if !ON_LINUX
102
- XFAIL_TESTS += test_abstract_ipc
103
+ XFAIL_TESTS = test_abstract_ipc
103
104
  endif