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.
- 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
@@ -45,7 +45,6 @@ int main (int argc, char *argv [])
|
|
45
45
|
assert (rc == 0);
|
46
46
|
|
47
47
|
int message_count = 20;
|
48
|
-
|
49
48
|
for (int j = 0; j < message_count; ++j) {
|
50
49
|
rc = zmq_send(s_out, (void*)&j, sizeof(int), 0);
|
51
50
|
if (rc < 0) {
|
@@ -53,15 +52,13 @@ int main (int argc, char *argv [])
|
|
53
52
|
return -1;
|
54
53
|
}
|
55
54
|
}
|
56
|
-
|
57
|
-
zmq_sleep (1);
|
55
|
+
msleep (SETTLE_TIME);
|
58
56
|
|
59
57
|
int payload_recved = 0;
|
60
|
-
rc = zmq_recv(s_in, (void*)&payload_recved, sizeof(int), 0);
|
58
|
+
rc = zmq_recv (s_in, (void*)&payload_recved, sizeof(int), 0);
|
61
59
|
assert (rc > 0);
|
62
60
|
assert (payload_recved == message_count - 1);
|
63
61
|
|
64
|
-
|
65
62
|
rc = zmq_close (s_in);
|
66
63
|
assert (rc == 0);
|
67
64
|
|
@@ -61,7 +61,7 @@ void test_ctx_shutdown()
|
|
61
61
|
void *receiver_thread = zmq_threadstart (&receiver, socket);
|
62
62
|
|
63
63
|
// Wait for thread to start up and block
|
64
|
-
|
64
|
+
msleep (SETTLE_TIME);
|
65
65
|
|
66
66
|
// Shutdown context, if we used destroy here we would deadlock.
|
67
67
|
rc = zmq_ctx_shutdown (ctx);
|
@@ -33,7 +33,7 @@ int main (void)
|
|
33
33
|
assert (zmq_ctx_get (ctx, ZMQ_IPV6) == 0);
|
34
34
|
|
35
35
|
rc = zmq_ctx_set (ctx, ZMQ_IPV6, true);
|
36
|
-
assert (zmq_ctx_get (ctx, ZMQ_IPV6) ==
|
36
|
+
assert (zmq_ctx_get (ctx, ZMQ_IPV6) == 1);
|
37
37
|
|
38
38
|
void *router = zmq_socket (ctx, ZMQ_ROUTER);
|
39
39
|
int ipv6;
|
@@ -193,8 +193,7 @@ int main (void)
|
|
193
193
|
assert (rc == 0);
|
194
194
|
|
195
195
|
// Give time to process disconnect
|
196
|
-
|
197
|
-
zmq_sleep(1);
|
196
|
+
msleep (SETTLE_TIME);
|
198
197
|
|
199
198
|
// Send a message, should fail
|
200
199
|
rc = zmq_send (frontend, "Hello", 5, ZMQ_DONTWAIT);
|
@@ -142,7 +142,7 @@ void test_connect_before_bind_pub_sub()
|
|
142
142
|
assert (rc == 0);
|
143
143
|
|
144
144
|
// Wait for pub-sub connection to happen
|
145
|
-
|
145
|
+
msleep (SETTLE_TIME);
|
146
146
|
|
147
147
|
// Queue up some data, this not will be dropped
|
148
148
|
rc = zmq_send_const (connectSocket, "after", 6, 0);
|
@@ -0,0 +1,90 @@
|
|
1
|
+
/*
|
2
|
+
Copyright (c) 2007-2013 Contributors as noted in the AUTHORS file
|
3
|
+
|
4
|
+
This file is part of 0MQ.
|
5
|
+
|
6
|
+
0MQ is free software; you can redistribute it and/or modify it under
|
7
|
+
the terms of the GNU Lesser General Public License as published by
|
8
|
+
the Free Software Foundation; either version 3 of the License, or
|
9
|
+
(at your option) any later version.
|
10
|
+
|
11
|
+
0MQ is distributed in the hope that it will be useful,
|
12
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
GNU Lesser General Public License for more details.
|
15
|
+
|
16
|
+
You should have received a copy of the GNU Lesser General Public License
|
17
|
+
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
*/
|
19
|
+
|
20
|
+
#include "testutil.hpp"
|
21
|
+
#include <zmq.h>
|
22
|
+
#include <stdio.h>
|
23
|
+
#include <stdlib.h>
|
24
|
+
#include <vector>
|
25
|
+
|
26
|
+
void test_system_max ()
|
27
|
+
{
|
28
|
+
// Keep allocating sockets until we run out of system resources
|
29
|
+
const int no_of_sockets = 2 * 65536;
|
30
|
+
void *ctx = zmq_ctx_new ();
|
31
|
+
zmq_ctx_set (ctx, ZMQ_MAX_SOCKETS, no_of_sockets);
|
32
|
+
std::vector <void*> sockets;
|
33
|
+
|
34
|
+
while (true) {
|
35
|
+
void *socket = zmq_socket (ctx, ZMQ_PAIR);
|
36
|
+
if (!socket)
|
37
|
+
break;
|
38
|
+
sockets.push_back (socket);
|
39
|
+
}
|
40
|
+
assert ((int) sockets.size () < no_of_sockets);
|
41
|
+
|
42
|
+
// System is out of resources, further calls to zmq_socket should return NULL
|
43
|
+
for (unsigned int i = 0; i < 10; ++i) {
|
44
|
+
void *socket = zmq_socket (ctx, ZMQ_PAIR);
|
45
|
+
assert (socket == NULL);
|
46
|
+
}
|
47
|
+
// Clean up.
|
48
|
+
for (unsigned int i = 0; i < sockets.size (); ++i)
|
49
|
+
zmq_close (sockets [i]);
|
50
|
+
|
51
|
+
zmq_ctx_destroy (ctx);
|
52
|
+
}
|
53
|
+
|
54
|
+
void test_zmq_default_max ()
|
55
|
+
{
|
56
|
+
// Keep allocating sockets until we hit the default limit
|
57
|
+
void *ctx = zmq_ctx_new ();
|
58
|
+
std::vector<void*> sockets;
|
59
|
+
|
60
|
+
while (true) {
|
61
|
+
void *socket = zmq_socket (ctx, ZMQ_PAIR);
|
62
|
+
if (!socket)
|
63
|
+
break;
|
64
|
+
sockets.push_back (socket);
|
65
|
+
}
|
66
|
+
// We may stop sooner if system has fewer available sockets
|
67
|
+
assert (sockets.size () <= ZMQ_MAX_SOCKETS_DFLT);
|
68
|
+
|
69
|
+
// Further calls to zmq_socket should return NULL
|
70
|
+
for (unsigned int i = 0; i < 10; ++i) {
|
71
|
+
void *socket = zmq_socket (ctx, ZMQ_PAIR);
|
72
|
+
assert (socket == NULL);
|
73
|
+
}
|
74
|
+
|
75
|
+
// Clean up
|
76
|
+
for (unsigned int i = 0; i < sockets.size (); ++i)
|
77
|
+
zmq_close (sockets [i]);
|
78
|
+
|
79
|
+
zmq_ctx_destroy (ctx);
|
80
|
+
}
|
81
|
+
|
82
|
+
int main (void)
|
83
|
+
{
|
84
|
+
setup_test_environment ();
|
85
|
+
|
86
|
+
test_system_max ();
|
87
|
+
test_zmq_default_max ();
|
88
|
+
|
89
|
+
return 0;
|
90
|
+
}
|
@@ -211,7 +211,7 @@ int main (void)
|
|
211
211
|
rc = zmq_socket_monitor (req, "inproc://monitor.req", ZMQ_EVENT_ALL);
|
212
212
|
assert (rc == 0);
|
213
213
|
threads [1] = zmq_threadstart(&req_socket_monitor, ctx);
|
214
|
-
|
214
|
+
msleep (SETTLE_TIME);
|
215
215
|
|
216
216
|
// Bind REQ and REP
|
217
217
|
rc = zmq_bind (rep, addr.c_str());
|
@@ -238,8 +238,8 @@ int main (void)
|
|
238
238
|
rc = zmq_close (rep);
|
239
239
|
assert (rc == 0);
|
240
240
|
|
241
|
-
// Allow
|
242
|
-
|
241
|
+
// Allow enough time for detecting error states
|
242
|
+
msleep (250);
|
243
243
|
|
244
244
|
// Close the REQ socket
|
245
245
|
rc = zmq_close (req);
|
@@ -54,7 +54,7 @@ int main (void)
|
|
54
54
|
// We have to give the connects time to finish otherwise the requests
|
55
55
|
// will not properly round-robin. We could alternatively connect the
|
56
56
|
// REQ sockets to the REP sockets.
|
57
|
-
|
57
|
+
msleep (SETTLE_TIME);
|
58
58
|
|
59
59
|
// Case 1: Second send() before a reply arrives in a pipe.
|
60
60
|
|
@@ -0,0 +1,65 @@
|
|
1
|
+
/*
|
2
|
+
Copyright (c) 2007-2013 Contributors as noted in the AUTHORS file
|
3
|
+
|
4
|
+
This file is part of 0MQ.
|
5
|
+
|
6
|
+
0MQ is free software; you can redistribute it and/or modify it under
|
7
|
+
the terms of the GNU Lesser General Public License as published by
|
8
|
+
the Free Software Foundation; either version 3 of the License, or
|
9
|
+
(at your option) any later version.
|
10
|
+
|
11
|
+
0MQ is distributed in the hope that it will be useful,
|
12
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
GNU Lesser General Public License for more details.
|
15
|
+
|
16
|
+
You should have received a copy of the GNU Lesser General Public License
|
17
|
+
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
*/
|
19
|
+
|
20
|
+
#include "testutil.hpp"
|
21
|
+
|
22
|
+
int main (void) {
|
23
|
+
setup_test_environment();
|
24
|
+
void *ctx = zmq_ctx_new();
|
25
|
+
assert(ctx);
|
26
|
+
|
27
|
+
void *router = zmq_socket(ctx, ZMQ_ROUTER);
|
28
|
+
assert(router);
|
29
|
+
void *dealer = zmq_socket(ctx, ZMQ_DEALER);
|
30
|
+
assert(dealer);
|
31
|
+
|
32
|
+
int one=1;
|
33
|
+
int rc = zmq_setsockopt(router, ZMQ_ROUTER_RAW, &one, sizeof(int));
|
34
|
+
assert(rc >= 0);
|
35
|
+
rc = zmq_setsockopt(router, ZMQ_ROUTER_MANDATORY, &one, sizeof(int));
|
36
|
+
assert(rc >= 0);
|
37
|
+
|
38
|
+
rc = zmq_bind(router, "tcp://127.0.0.1:5555");
|
39
|
+
rc = zmq_connect(dealer, "tcp://127.0.0.1:5555");
|
40
|
+
zmq_send(dealer, "", 0, 0);
|
41
|
+
|
42
|
+
|
43
|
+
zmq_msg_t ident, empty;
|
44
|
+
zmq_msg_init(&ident);
|
45
|
+
rc = zmq_msg_recv(&ident, router, 0);
|
46
|
+
assert(rc >= 0);
|
47
|
+
rc = zmq_msg_init_data(&empty, (void*)"", 0, NULL, NULL);
|
48
|
+
assert(rc >= 0);
|
49
|
+
|
50
|
+
rc = zmq_msg_send(&ident, router, ZMQ_SNDMORE);
|
51
|
+
assert(rc >= 0);
|
52
|
+
rc = zmq_msg_close(&ident);
|
53
|
+
assert(rc >= 0);
|
54
|
+
|
55
|
+
rc = zmq_msg_send(&empty, router, 0);
|
56
|
+
assert(rc >= 0);
|
57
|
+
|
58
|
+
// This close used to fail with Bad Address
|
59
|
+
rc = zmq_msg_close(&empty);
|
60
|
+
assert(rc >= 0);
|
61
|
+
|
62
|
+
close_zero_linger(dealer);
|
63
|
+
close_zero_linger(router);
|
64
|
+
zmq_ctx_term(ctx);
|
65
|
+
}
|
@@ -46,7 +46,7 @@ void test_round_robin_out (void *ctx)
|
|
46
46
|
// We have to give the connects time to finish otherwise the requests
|
47
47
|
// will not properly round-robin. We could alternatively connect the
|
48
48
|
// REQ sockets to the REP sockets.
|
49
|
-
|
49
|
+
msleep (SETTLE_TIME);
|
50
50
|
|
51
51
|
// Send our peer-replies, and expect every REP it used once in order
|
52
52
|
for (size_t peer = 0; peer < services; peer++) {
|
@@ -89,15 +89,14 @@ test_stream_to_dealer (void)
|
|
89
89
|
assert (rc == sizeof (greeting));
|
90
90
|
|
91
91
|
// Now we expect the data from the DEALER socket
|
92
|
-
//
|
93
|
-
rc = zmq_msg_recv (&identity, stream, 0);
|
94
|
-
assert (rc > 0);
|
95
|
-
assert (zmq_msg_more (&identity));
|
96
|
-
|
97
|
-
// Second frame contains the rest of greeting along with
|
98
|
-
// the Ready command
|
92
|
+
// We want the rest of greeting along with the Ready command
|
99
93
|
int bytes_read = 0;
|
100
94
|
while (bytes_read < 97) {
|
95
|
+
// First frame is the identity of the connection (each time)
|
96
|
+
rc = zmq_msg_recv (&identity, stream, 0);
|
97
|
+
assert (rc > 0);
|
98
|
+
assert (zmq_msg_more (&identity));
|
99
|
+
// Second frame contains the next chunk of data
|
101
100
|
rc = zmq_recv (stream, buffer + bytes_read, 255 - bytes_read, 0);
|
102
101
|
assert (rc >= 0);
|
103
102
|
bytes_read += rc;
|
@@ -49,7 +49,7 @@ int main (void)
|
|
49
49
|
assert (rc == 0);
|
50
50
|
|
51
51
|
// Allow unbind to settle
|
52
|
-
|
52
|
+
msleep (SETTLE_TIME);
|
53
53
|
|
54
54
|
// Check that sending would block (there's no outbound connection)
|
55
55
|
rc = zmq_send (push, "ABC", 3, ZMQ_DONTWAIT);
|
@@ -86,7 +86,7 @@ int main (void)
|
|
86
86
|
assert (rc == 0);
|
87
87
|
|
88
88
|
// Allow disconnect to settle
|
89
|
-
|
89
|
+
msleep (SETTLE_TIME);
|
90
90
|
|
91
91
|
// Check that sending would block (there's no inbound connections).
|
92
92
|
rc = zmq_send (push, "ABC", 3, ZMQ_DONTWAIT);
|
@@ -22,7 +22,12 @@
|
|
22
22
|
|
23
23
|
#include "../include/zmq.h"
|
24
24
|
#include "../include/zmq_utils.h"
|
25
|
-
#include "platform.hpp"
|
25
|
+
#include "../src/platform.hpp"
|
26
|
+
|
27
|
+
// This defines the settle time used in tests; raise this if we
|
28
|
+
// get test failures on slower systems due to binds/connects not
|
29
|
+
// settled. Tested to work reliably at 1 msec on a fast PC.
|
30
|
+
#define SETTLE_TIME 10 // In msec
|
26
31
|
|
27
32
|
#undef NDEBUG
|
28
33
|
#include <time.h>
|
@@ -259,4 +264,16 @@ void setup_test_environment()
|
|
259
264
|
#endif
|
260
265
|
}
|
261
266
|
|
267
|
+
// Provide portable millisecond sleep
|
268
|
+
// http://www.cplusplus.com/forum/unices/60161/ http://en.cppreference.com/w/cpp/thread/sleep_for
|
269
|
+
void msleep (int milliseconds)
|
270
|
+
{
|
271
|
+
#ifdef ZMQ_HAVE_WINDOWS
|
272
|
+
Sleep (milliseconds);
|
273
|
+
#else
|
274
|
+
usleep (static_cast <useconds_t> (milliseconds) * 1000);
|
275
|
+
#endif
|
276
|
+
}
|
277
|
+
|
278
|
+
|
262
279
|
#endif
|
data/lib/zmq/socket.rb
CHANGED
@@ -0,0 +1,44 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
class ZMQ::Socket::Stream
|
4
|
+
|
5
|
+
# == ZMQ::Socket::Stream
|
6
|
+
# A socket of type ZMQ::Socket::Stream is used to send and receive TCP data from a non-ØMQ peer,
|
7
|
+
# when using the tcp:// transport. A ZMQ::Socket::Stream socket can act as client and/or server,
|
8
|
+
# sending and/or receiving TCP data asynchronously.
|
9
|
+
#
|
10
|
+
# When receiving TCP data, a ZMQ::Socket::Stream socket shall prepend a message part containing
|
11
|
+
# the identity of the originating peer to the message before passing it to the application.
|
12
|
+
# Messages received are fair-queued from among all connected peers.
|
13
|
+
#
|
14
|
+
# When sending TCP data, a ZMQ::Socket::Stream socket shall remove the first part of the message
|
15
|
+
# and use it to determine the identity of the peer the message shall be routed to, and unroutable
|
16
|
+
# messages shall cause an EHOSTUNREACH or EAGAIN error.
|
17
|
+
#
|
18
|
+
# To open a connection to a server, use the zmq_connect call, and then fetch the socket identity
|
19
|
+
# using the ZMQ_IDENTITY zmq_getsockopt call.
|
20
|
+
#
|
21
|
+
# To close a specific client connection, as a server, send the identity frame followed by a zero-
|
22
|
+
# length message (see EXAMPLE section).
|
23
|
+
#
|
24
|
+
# The ZMQ_MSGMORE flag is ignored on data frames. You must send one identity frame followed by
|
25
|
+
# one data frame.
|
26
|
+
#
|
27
|
+
# Also, please note that omitting the ZMQ_MSGMORE flag will prevent sending further data (from
|
28
|
+
# any client) on the same socket.
|
29
|
+
#
|
30
|
+
# === Summary of ZMQ_STREAM characteristics
|
31
|
+
#
|
32
|
+
# [Compatible peer sockets] none.
|
33
|
+
# [Direction] Bidirectional
|
34
|
+
# [Send/receive pattern] Unrestricted
|
35
|
+
# [Outgoing routing strategy] See text
|
36
|
+
# [Incoming routing strategy] Fair-queued
|
37
|
+
# [ZMQ::Socket#hwm option action] EAGAIN
|
38
|
+
|
39
|
+
TYPE_STR = "STREAM"
|
40
|
+
|
41
|
+
def type
|
42
|
+
ZMQ::STREAM
|
43
|
+
end
|
44
|
+
end
|
data/lib/zmq/version.rb
CHANGED