rbczmq 1.7.4 → 1.7.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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