rbczmq 1.7.4 → 1.7.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/.travis.yml +4 -1
- data/CHANGELOG.rdoc +13 -0
- data/Gemfile +8 -1
- data/Gemfile.lock +211 -2
- data/README.rdoc +7 -4
- data/ext/rbczmq/beacon.c +6 -3
- data/ext/rbczmq/context.c +117 -8
- data/ext/rbczmq/context.h +5 -0
- data/ext/rbczmq/message.c +6 -4
- data/ext/rbczmq/poller.c +12 -5
- data/ext/rbczmq/rbczmq_ext.c +2 -0
- data/ext/rbczmq/rbczmq_ext.h +1 -0
- data/ext/rbczmq/socket.c +135 -59
- data/ext/rbczmq/socket.h +2 -0
- data/ext/zeromq/CMakeLists.txt +3 -1
- data/ext/zeromq/NEWS +28 -3
- data/ext/zeromq/doc/zmq.txt +3 -3
- data/ext/zeromq/doc/zmq_getsockopt.txt +3 -3
- data/ext/zeromq/doc/zmq_msg_get.txt +2 -1
- data/ext/zeromq/doc/zmq_msg_more.txt +1 -1
- data/ext/zeromq/doc/zmq_setsockopt.txt +18 -19
- data/ext/zeromq/doc/zmq_socket.txt +4 -0
- data/ext/zeromq/include/zmq.h +14 -18
- data/ext/zeromq/src/clock.cpp +57 -2
- data/ext/zeromq/src/ctx.cpp +11 -5
- data/ext/zeromq/src/devpoll.cpp +5 -0
- data/ext/zeromq/src/devpoll.hpp +2 -0
- data/ext/zeromq/src/epoll.cpp +5 -0
- data/ext/zeromq/src/epoll.hpp +2 -0
- data/ext/zeromq/src/i_engine.hpp +2 -2
- data/ext/zeromq/src/kqueue.cpp +5 -0
- data/ext/zeromq/src/kqueue.hpp +2 -0
- data/ext/zeromq/src/pgm_receiver.cpp +2 -2
- data/ext/zeromq/src/pgm_receiver.hpp +2 -2
- data/ext/zeromq/src/pgm_sender.cpp +2 -2
- data/ext/zeromq/src/pgm_sender.hpp +2 -2
- data/ext/zeromq/src/poll.cpp +5 -0
- data/ext/zeromq/src/poll.hpp +2 -0
- data/ext/zeromq/src/router.cpp +2 -0
- data/ext/zeromq/src/select.cpp +5 -0
- data/ext/zeromq/src/select.hpp +2 -0
- data/ext/zeromq/src/session_base.cpp +2 -2
- data/ext/zeromq/src/signaler.cpp +73 -99
- data/ext/zeromq/src/signaler.hpp +2 -2
- data/ext/zeromq/src/socket_base.cpp +42 -40
- data/ext/zeromq/src/stream_engine.cpp +60 -58
- data/ext/zeromq/src/stream_engine.hpp +7 -8
- data/ext/zeromq/src/zmq_utils.cpp +6 -5
- data/ext/zeromq/tests/Makefile.am +6 -5
- data/ext/zeromq/tests/test_conflate.cpp +2 -5
- data/ext/zeromq/tests/test_ctx_destroy.cpp +1 -1
- data/ext/zeromq/tests/test_ctx_options.cpp +1 -1
- data/ext/zeromq/tests/test_immediate.cpp +1 -2
- data/ext/zeromq/tests/test_inproc_connect.cpp +1 -1
- data/ext/zeromq/tests/test_iov.cpp +1 -1
- data/ext/zeromq/tests/test_many_sockets.cpp +90 -0
- data/ext/zeromq/tests/test_monitor.cpp +3 -3
- data/ext/zeromq/tests/test_req_relaxed.cpp +1 -1
- data/ext/zeromq/tests/test_router_raw_empty.cpp +65 -0
- data/ext/zeromq/tests/test_spec_req.cpp +1 -1
- data/ext/zeromq/tests/test_stream.cpp +6 -7
- data/ext/zeromq/tests/test_sub_forward.cpp +1 -1
- data/ext/zeromq/tests/test_term_endpoint.cpp +2 -2
- data/ext/zeromq/tests/testutil.hpp +18 -1
- data/ext/zeromq/tools/Makefile.am +1 -1
- data/lib/zmq/socket.rb +1 -0
- data/lib/zmq/socket/stream.rb +44 -0
- data/lib/zmq/version.rb +1 -1
- data/test/socket/test_dealer_socket.rb +1 -1
- data/test/socket/test_pair_socket.rb +1 -1
- data/test/socket/test_pair_sockets.rb +1 -1
- data/test/socket/test_pub_socket.rb +1 -1
- data/test/socket/test_pub_sub_sockets.rb +1 -1
- data/test/socket/test_pull_socket.rb +1 -1
- data/test/socket/test_push_pull_sockets.rb +1 -1
- data/test/socket/test_push_socket.rb +1 -1
- data/test/socket/test_rep_socket.rb +1 -1
- data/test/socket/test_req_rep_sockets.rb +1 -1
- data/test/socket/test_req_socket.rb +1 -1
- data/test/socket/test_router_socket.rb +1 -1
- data/test/socket/test_routing.rb +1 -1
- data/test/socket/test_stream_socket.rb +74 -0
- data/test/socket/test_sub_socket.rb +1 -1
- data/test/test_beacon.rb +4 -2
- data/test/test_context.rb +2 -2
- data/test/test_frame.rb +2 -2
- data/test/test_handler.rb +2 -2
- data/test/test_logger.rb +1 -1
- data/test/test_loop.rb +2 -2
- data/test/test_message.rb +1 -1
- data/test/test_monitoring.rb +15 -3
- data/test/test_poller.rb +2 -2
- data/test/test_pollitem.rb +2 -2
- data/test/test_socket.rb +53 -6
- data/test/test_threading.rb +2 -2
- data/test/test_timer.rb +2 -2
- data/test/test_zmq.rb +2 -2
- metadata +109 -104
data/ext/zeromq/src/signaler.hpp
CHANGED
@@ -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
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
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
|
-
|
78
|
-
|
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 (
|
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
|
-
|
221
|
-
|
220
|
+
size_t bufsize = 0;
|
221
|
+
decoder->get_buffer (&inpos, &bufsize);
|
222
222
|
|
223
|
-
|
224
|
-
if (
|
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> (
|
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
|
-
|
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
|
-
|
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::
|
336
|
+
void zmq::stream_engine_t::restart_output ()
|
332
337
|
{
|
333
338
|
if (unlikely (io_error))
|
334
339
|
return;
|
335
340
|
|
336
|
-
if (likely (
|
341
|
+
if (likely (output_stopped)) {
|
337
342
|
set_pollout (handle);
|
338
|
-
|
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::
|
353
|
+
void zmq::stream_engine_t::restart_input ()
|
349
354
|
{
|
350
|
-
zmq_assert (
|
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
|
-
|
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 ==
|
404
|
+
if (n == 0) {
|
400
405
|
error ();
|
401
406
|
return false;
|
402
407
|
}
|
403
|
-
if (n ==
|
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 (
|
618
|
-
|
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 (
|
634
|
-
|
635
|
-
if (
|
636
|
-
|
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
|
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 (
|
793
|
-
|
794
|
-
|
795
|
-
|
796
|
-
|
797
|
-
|
798
|
-
|
799
|
-
|
800
|
-
|
801
|
-
|
802
|
-
|
803
|
-
|
804
|
-
|
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
|
822
|
+
return rc == SOCKET_ERROR? -1: rc;
|
813
823
|
|
814
824
|
#else
|
815
825
|
|
816
|
-
ssize_t
|
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 (
|
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
|
-
|
837
|
+
if (errno == EWOULDBLOCK || errno == EINTR)
|
838
|
+
errno = EAGAIN;
|
833
839
|
}
|
834
840
|
|
835
|
-
|
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
|
64
|
-
void
|
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).
|
91
|
-
// of bytes actually read
|
92
|
-
//
|
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
|
181
|
+
bool input_stopped;
|
183
182
|
|
184
183
|
// True iff the engine doesn't have any message to encode.
|
185
|
-
bool
|
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 <
|
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*
|
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
|
-
//
|
189
|
-
if (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
|
103
|
+
XFAIL_TESTS = test_abstract_ipc
|
103
104
|
endif
|