ffi-rzmq 1.0.3 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.travis.yml +1 -1
- data/AUTHORS.txt +5 -1
- data/History.txt +19 -0
- data/README.rdoc +2 -4
- data/examples/README.rdoc +1 -3
- data/examples/{v3api/latency_measurement.rb → latency_measurement.rb} +1 -2
- data/examples/{v3api/local_lat.rb → local_lat.rb} +1 -1
- data/examples/{v3api/local_lat_poll.rb → local_lat_poll.rb} +4 -4
- data/examples/{v3api/local_throughput.rb → local_throughput.rb} +1 -1
- data/examples/{v3api/pub.rb → pub.rb} +1 -1
- data/examples/{v2api/publish_subscribe.rb → publish_subscribe.rb} +2 -2
- data/examples/{v2api/remote_lat.rb → remote_lat.rb} +1 -1
- data/examples/{v3api/remote_throughput.rb → remote_throughput.rb} +4 -3
- data/examples/{v2api/reqrep_poll.rb → reqrep_poll.rb} +3 -4
- data/examples/{v2api/request_response.rb → request_response.rb} +1 -2
- data/examples/{v3api/sub.rb → sub.rb} +1 -2
- data/examples/{v3api/throughput_measurement.rb → throughput_measurement.rb} +1 -1
- data/examples/{v3api/xreqxrep_poll.rb → xreqxrep_poll.rb} +6 -7
- data/ffi-rzmq.gemspec +4 -4
- data/lib/ffi-rzmq.rb +2 -3
- data/lib/ffi-rzmq/context.rb +25 -53
- data/lib/ffi-rzmq/device.rb +8 -4
- data/lib/ffi-rzmq/message.rb +24 -30
- data/lib/ffi-rzmq/poll.rb +5 -16
- data/lib/ffi-rzmq/socket.rb +129 -278
- data/lib/ffi-rzmq/util.rb +11 -36
- data/lib/ffi-rzmq/version.rb +1 -1
- data/spec/context_spec.rb +3 -8
- data/spec/device_spec.rb +10 -9
- data/spec/nonblocking_recv_spec.rb +7 -7
- data/spec/pushpull_spec.rb +8 -7
- data/spec/reqrep_spec.rb +6 -6
- data/spec/socket_spec.rb +43 -130
- data/spec/spec_helper.rb +3 -11
- metadata +77 -104
- data/examples/v2api/latency_measurement.rb +0 -139
- data/examples/v2api/local_lat.rb +0 -58
- data/examples/v2api/local_lat_poll.rb +0 -66
- data/examples/v2api/local_throughput.rb +0 -58
- data/examples/v2api/pub.rb +0 -46
- data/examples/v2api/remote_throughput.rb +0 -39
- data/examples/v2api/sub.rb +0 -74
- data/examples/v2api/throughput_measurement.rb +0 -138
- data/examples/v2api/xreqxrep_poll.rb +0 -93
- data/examples/v3api/publish_subscribe.rb +0 -82
- data/examples/v3api/remote_lat.rb +0 -71
- data/examples/v3api/reqrep_poll.rb +0 -62
- data/examples/v3api/request_response.rb +0 -40
- data/lib/ffi-rzmq/constants.rb +0 -187
- data/lib/ffi-rzmq/libc.rb +0 -19
- data/lib/ffi-rzmq/libzmq.rb +0 -283
data/lib/ffi-rzmq/util.rb
CHANGED
@@ -28,19 +28,6 @@ module ZMQ
|
|
28
28
|
LibZMQ.zmq_strerror(errno).read_string
|
29
29
|
end
|
30
30
|
|
31
|
-
# Returns an array of the form [major, minor, patch] to represent the
|
32
|
-
# version of libzmq.
|
33
|
-
#
|
34
|
-
# Class method! Invoke as: ZMQ::Util.version
|
35
|
-
#
|
36
|
-
def self.version
|
37
|
-
major = FFI::MemoryPointer.new :int
|
38
|
-
minor = FFI::MemoryPointer.new :int
|
39
|
-
patch = FFI::MemoryPointer.new :int
|
40
|
-
LibZMQ.zmq_version major, minor, patch
|
41
|
-
[major.read_int, minor.read_int, patch.read_int]
|
42
|
-
end
|
43
|
-
|
44
31
|
# Attempts to bind to a random tcp port on +host+ up to +max_tries+
|
45
32
|
# times. Returns the port number upon success or nil upon failure.
|
46
33
|
#
|
@@ -56,7 +43,7 @@ module ZMQ
|
|
56
43
|
|
57
44
|
resultcode_ok?(rc) ? random : nil
|
58
45
|
end
|
59
|
-
|
46
|
+
|
60
47
|
# :doc:
|
61
48
|
# Called to verify whether there were any errors during
|
62
49
|
# operation. If any are found, raise the appropriate #ZeroMQError.
|
@@ -90,38 +77,26 @@ module ZMQ
|
|
90
77
|
|
91
78
|
else
|
92
79
|
raise ZeroMQError.new source, result_code, -1,
|
93
|
-
|
80
|
+
"Source [#{source}] does not match any zmq_* strings, rc [#{result_code}], errno [#{ZMQ::Util.errno}], error_string [#{ZMQ::Util.error_string}]"
|
94
81
|
end
|
95
82
|
end
|
96
83
|
|
97
84
|
def self.eagain?
|
98
85
|
EAGAIN == ZMQ::Util.errno
|
99
86
|
end
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
'zmq_init' == source ||
|
104
|
-
'zmq_socket' == source
|
105
|
-
end
|
106
|
-
|
107
|
-
def self.message_error?(source)
|
108
|
-
['zmq_msg_init', 'zmq_msg_init_data', 'zmq_msg_copy', 'zmq_msg_move'].include?(source)
|
109
|
-
end
|
110
|
-
|
111
|
-
elsif LibZMQ.version3?
|
112
|
-
def self.context_error?(source)
|
113
|
-
'zmq_ctx_new' == source ||
|
87
|
+
|
88
|
+
def self.context_error?(source)
|
89
|
+
'zmq_ctx_new' == source ||
|
114
90
|
'zmq_ctx_set' == source ||
|
115
91
|
'zmq_ctx_get' == source ||
|
116
92
|
'zmq_ctx_destory' == source ||
|
117
93
|
'zmq_ctx_set_monitor' == source
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
end # if LibZMQ.version...?
|
94
|
+
end
|
95
|
+
|
96
|
+
def self.message_error?(source)
|
97
|
+
['zmq_msg_init', 'zmq_msg_init_data', 'zmq_msg_copy', 'zmq_msg_move', 'zmq_msg_close', 'zmq_msg_get',
|
98
|
+
'zmq_msg_more', 'zmq_msg_recv', 'zmq_msg_send', 'zmq_msg_set'].include?(source)
|
99
|
+
end
|
125
100
|
|
126
101
|
end # module Util
|
127
102
|
|
data/lib/ffi-rzmq/version.rb
CHANGED
data/spec/context_spec.rb
CHANGED
@@ -84,14 +84,9 @@ module ZMQ
|
|
84
84
|
|
85
85
|
it "should call the correct library function to terminate the context" do
|
86
86
|
ctx = Context.new
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
ctx.terminate
|
91
|
-
else
|
92
|
-
LibZMQ.should_receive(:zmq_ctx_destroy).with(ctx.pointer).and_return(0)
|
93
|
-
ctx.terminate
|
94
|
-
end
|
87
|
+
|
88
|
+
LibZMQ.should_receive(:zmq_ctx_destroy).with(ctx.pointer).and_return(0)
|
89
|
+
ctx.terminate
|
95
90
|
end
|
96
91
|
end # context terminate
|
97
92
|
|
data/spec/device_spec.rb
CHANGED
@@ -5,7 +5,7 @@ module ZMQ
|
|
5
5
|
describe Device do
|
6
6
|
include APIHelper
|
7
7
|
|
8
|
-
before(:
|
8
|
+
before(:each) do
|
9
9
|
@ctx = Context.new
|
10
10
|
poller_setup
|
11
11
|
@front_endpoint = "inproc://device_front_test"
|
@@ -13,7 +13,7 @@ module ZMQ
|
|
13
13
|
@mutex = Mutex.new
|
14
14
|
end
|
15
15
|
|
16
|
-
after(:
|
16
|
+
after(:each) do
|
17
17
|
@ctx.terminate
|
18
18
|
end
|
19
19
|
|
@@ -26,7 +26,9 @@ module ZMQ
|
|
26
26
|
front = @ctx.socket(ZMQ::PUSH)
|
27
27
|
front.bind(@front_endpoint)
|
28
28
|
@mutex.synchronize { @device_thread = true }
|
29
|
-
|
29
|
+
puts "create streamer device and running..."
|
30
|
+
Device.new(back, front)
|
31
|
+
puts "device exited"
|
30
32
|
back.close
|
31
33
|
front.close
|
32
34
|
end
|
@@ -34,12 +36,11 @@ module ZMQ
|
|
34
36
|
|
35
37
|
def wait_for_device
|
36
38
|
loop do
|
37
|
-
can_break =
|
38
|
-
|
39
|
-
can_break = true if @device_thread
|
40
|
-
end
|
39
|
+
can_break = @mutex.synchronize { @device_thread }
|
40
|
+
|
41
41
|
break if can_break
|
42
42
|
end
|
43
|
+
puts "broke out of wait_for_device loop"
|
43
44
|
end
|
44
45
|
|
45
46
|
it "should create a device without error given valid opts" do
|
@@ -61,7 +62,7 @@ module ZMQ
|
|
61
62
|
end
|
62
63
|
|
63
64
|
res = ''
|
64
|
-
rc = puller.recv_string(res, ZMQ::
|
65
|
+
rc = puller.recv_string(res, ZMQ::DONTWAIT)
|
65
66
|
res.should == "hello"
|
66
67
|
|
67
68
|
pusher.close
|
@@ -70,7 +71,7 @@ module ZMQ
|
|
70
71
|
|
71
72
|
it "should raise an ArgumentError when trying to pass non-socket objects into the device" do
|
72
73
|
lambda {
|
73
|
-
Device.new(
|
74
|
+
Device.new(1,2)
|
74
75
|
}.should raise_exception(ArgumentError)
|
75
76
|
end
|
76
77
|
end
|
@@ -12,19 +12,19 @@ module ZMQ
|
|
12
12
|
|
13
13
|
it "returns -1 when there are no messages to read" do
|
14
14
|
array = []
|
15
|
-
rc = @receiver.recvmsgs(array, ZMQ::
|
15
|
+
rc = @receiver.recvmsgs(array, ZMQ::DONTWAIT)
|
16
16
|
Util.resultcode_ok?(rc).should be_false
|
17
17
|
end
|
18
18
|
|
19
19
|
it "gets EAGAIN when there are no messages to read" do
|
20
20
|
array = []
|
21
|
-
rc = @receiver.recvmsgs(array, ZMQ::
|
21
|
+
rc = @receiver.recvmsgs(array, ZMQ::DONTWAIT)
|
22
22
|
ZMQ::Util.errno.should == ZMQ::EAGAIN
|
23
23
|
end
|
24
24
|
|
25
25
|
it "returns the given array unmodified when there are no messages to read" do
|
26
26
|
array = []
|
27
|
-
rc = @receiver.recvmsgs(array, ZMQ::
|
27
|
+
rc = @receiver.recvmsgs(array, ZMQ::DONTWAIT)
|
28
28
|
array.size.should be_zero
|
29
29
|
end
|
30
30
|
|
@@ -39,7 +39,7 @@ module ZMQ
|
|
39
39
|
end
|
40
40
|
|
41
41
|
array = []
|
42
|
-
rc = @receiver.recvmsgs(array, ZMQ::
|
42
|
+
rc = @receiver.recvmsgs(array, ZMQ::DONTWAIT)
|
43
43
|
Util.resultcode_ok?(rc).should be_true
|
44
44
|
array.size.should == 1
|
45
45
|
end
|
@@ -52,7 +52,7 @@ module ZMQ
|
|
52
52
|
end
|
53
53
|
|
54
54
|
array = []
|
55
|
-
rc = @receiver.recvmsgs(array, ZMQ::
|
55
|
+
rc = @receiver.recvmsgs(array, ZMQ::DONTWAIT)
|
56
56
|
Util.resultcode_ok?(rc).should be_true
|
57
57
|
array.size.should == 10
|
58
58
|
end
|
@@ -68,7 +68,7 @@ module ZMQ
|
|
68
68
|
end
|
69
69
|
|
70
70
|
array = []
|
71
|
-
rc = @receiver.recvmsgs(array, ZMQ::
|
71
|
+
rc = @receiver.recvmsgs(array, ZMQ::DONTWAIT)
|
72
72
|
Util.resultcode_ok?(rc).should be_true
|
73
73
|
array.size.should == 1 + 1 # extra 1 for envelope
|
74
74
|
end
|
@@ -81,7 +81,7 @@ module ZMQ
|
|
81
81
|
end
|
82
82
|
|
83
83
|
array = []
|
84
|
-
rc = @receiver.recvmsgs(array, ZMQ::
|
84
|
+
rc = @receiver.recvmsgs(array, ZMQ::DONTWAIT)
|
85
85
|
Util.resultcode_ok?(rc).should be_true
|
86
86
|
array.size.should == 10 + 1 # add 1 for the envelope
|
87
87
|
end
|
data/spec/pushpull_spec.rb
CHANGED
@@ -44,11 +44,11 @@ module ZMQ
|
|
44
44
|
|
45
45
|
poll_it_for_read(@pull) do
|
46
46
|
rc = @push.sendmsg sent_message
|
47
|
-
|
47
|
+
rc.should == string.size
|
48
48
|
end
|
49
49
|
|
50
|
-
rc = @pull.recvmsg received_message, ZMQ::
|
51
|
-
|
50
|
+
rc = @pull.recvmsg received_message, ZMQ::DONTWAIT
|
51
|
+
rc.should == string.size
|
52
52
|
received_message.copy_out_string.should == string
|
53
53
|
end
|
54
54
|
|
@@ -71,15 +71,16 @@ module ZMQ
|
|
71
71
|
sockets << @pull
|
72
72
|
|
73
73
|
sockets.each do |socket|
|
74
|
-
|
74
|
+
thr = Thread.new do
|
75
75
|
buffer = ''
|
76
76
|
rc = socket.recv_string buffer
|
77
|
-
|
77
|
+
rc.should == buffer.size
|
78
78
|
mutex.synchronize { received << buffer }
|
79
79
|
socket.close
|
80
80
|
end
|
81
|
+
threads << thr
|
81
82
|
end
|
82
|
-
|
83
|
+
|
83
84
|
count.times { @push.send_string(string) }
|
84
85
|
|
85
86
|
threads.each {|t| t.join}
|
@@ -98,7 +99,7 @@ module ZMQ
|
|
98
99
|
buffer = ''
|
99
100
|
rc = 0
|
100
101
|
mutex.synchronize { rc = @pull.recv_string buffer }
|
101
|
-
|
102
|
+
rc.should == buffer.size
|
102
103
|
mutex.synchronize { received << buffer }
|
103
104
|
end
|
104
105
|
end
|
data/spec/reqrep_spec.rb
CHANGED
@@ -54,9 +54,9 @@ module ZMQ
|
|
54
54
|
received_message = Message.new
|
55
55
|
|
56
56
|
rc = @ping.sendmsg(Message.new(string))
|
57
|
-
|
57
|
+
rc.should == string.size
|
58
58
|
rc = @pong.recvmsg received_message
|
59
|
-
|
59
|
+
rc.should == string.size
|
60
60
|
|
61
61
|
received_message.copy_out_string.should == string
|
62
62
|
end
|
@@ -66,12 +66,12 @@ module ZMQ
|
|
66
66
|
received_message = Message.new
|
67
67
|
|
68
68
|
poll_it_for_read(@pong) do
|
69
|
-
rc = @ping.sendmsg(Message.new(string), ZMQ::
|
70
|
-
|
69
|
+
rc = @ping.sendmsg(Message.new(string), ZMQ::DONTWAIT)
|
70
|
+
rc.should == string.size
|
71
71
|
end
|
72
72
|
|
73
|
-
rc = @pong.recvmsg received_message, ZMQ::
|
74
|
-
|
73
|
+
rc = @pong.recvmsg received_message, ZMQ::DONTWAIT
|
74
|
+
rc.should == string.size
|
75
75
|
|
76
76
|
received_message.copy_out_string.should == string
|
77
77
|
end
|
data/spec/socket_spec.rb
CHANGED
@@ -7,11 +7,8 @@ module ZMQ
|
|
7
7
|
describe Socket do
|
8
8
|
include APIHelper
|
9
9
|
|
10
|
-
socket_types =
|
11
|
-
[ZMQ::REQ, ZMQ::REP, ZMQ::DEALER, ZMQ::ROUTER, ZMQ::PUB, ZMQ::SUB, ZMQ::PUSH, ZMQ::PULL, ZMQ::PAIR]
|
12
|
-
elsif LibZMQ.version3?
|
10
|
+
socket_types =
|
13
11
|
[ZMQ::REQ, ZMQ::REP, ZMQ::DEALER, ZMQ::ROUTER, ZMQ::PUB, ZMQ::SUB, ZMQ::PUSH, ZMQ::PULL, ZMQ::PAIR, ZMQ::XPUB, ZMQ::XSUB]
|
14
|
-
end
|
15
12
|
|
16
13
|
context "when initializing" do
|
17
14
|
before(:all) { @ctx = Context.new }
|
@@ -173,123 +170,48 @@ module ZMQ
|
|
173
170
|
end
|
174
171
|
end # context using option ZMQ::IDENTITY
|
175
172
|
|
173
|
+
context "using option ZMQ::IPV4ONLY" do
|
174
|
+
it "should enable use of IPV6 sockets when set to 0" do
|
175
|
+
value = 0
|
176
|
+
socket.setsockopt ZMQ::IPV4ONLY, value
|
177
|
+
array = []
|
178
|
+
rc = socket.getsockopt(ZMQ::IPV4ONLY, array)
|
179
|
+
rc.should == 0
|
180
|
+
array[0].should == value
|
181
|
+
end
|
176
182
|
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
rc = socket.getsockopt(ZMQ::HWM, array)
|
185
|
-
rc.should == 0
|
186
|
-
array[0].should == hwm
|
187
|
-
end
|
188
|
-
end # context using option ZMQ::HWM
|
189
|
-
|
190
|
-
|
191
|
-
context "using option ZMQ::SWAP" do
|
192
|
-
it "should set the swap value given a positive value" do
|
193
|
-
swap = 10_000
|
194
|
-
socket.setsockopt ZMQ::SWAP, swap
|
195
|
-
array = []
|
196
|
-
rc = socket.getsockopt(ZMQ::SWAP, array)
|
197
|
-
rc.should == 0
|
198
|
-
array[0].should == swap
|
199
|
-
end
|
200
|
-
|
201
|
-
it "returns -1 given a negative value" do
|
202
|
-
swap = -10_000
|
203
|
-
rc = socket.setsockopt(ZMQ::SWAP, swap)
|
204
|
-
rc.should == -1
|
205
|
-
end
|
206
|
-
end # context using option ZMQ::SWP
|
207
|
-
|
208
|
-
|
209
|
-
context "using option ZMQ::MCAST_LOOP" do
|
210
|
-
it "should enable the multicast loopback given a 1 (true) value" do
|
211
|
-
socket.setsockopt ZMQ::MCAST_LOOP, 1
|
212
|
-
array = []
|
213
|
-
rc = socket.getsockopt(ZMQ::MCAST_LOOP, array)
|
214
|
-
rc.should == 0
|
215
|
-
array[0].should be_true
|
216
|
-
end
|
217
|
-
|
218
|
-
it "should disable the multicast loopback given a 0 (false) value" do
|
219
|
-
socket.setsockopt ZMQ::MCAST_LOOP, 0
|
220
|
-
array = []
|
221
|
-
rc = socket.getsockopt(ZMQ::MCAST_LOOP, array)
|
222
|
-
rc.should == 0
|
223
|
-
array[0].should be_false
|
224
|
-
end
|
225
|
-
end # context using option ZMQ::MCAST_LOOP
|
226
|
-
|
227
|
-
|
228
|
-
context "using option ZMQ::RECOVERY_IVL_MSEC" do
|
229
|
-
it "should set the time interval for saving messages measured in milliseconds given a positive value" do
|
230
|
-
value = 200
|
231
|
-
socket.setsockopt ZMQ::RECOVERY_IVL_MSEC, value
|
232
|
-
array = []
|
233
|
-
rc = socket.getsockopt(ZMQ::RECOVERY_IVL_MSEC, array)
|
234
|
-
rc.should == 0
|
235
|
-
array[0].should == value
|
236
|
-
end
|
237
|
-
|
238
|
-
it "should default to a value of -1" do
|
239
|
-
value = -1
|
240
|
-
array = []
|
241
|
-
rc = socket.getsockopt(ZMQ::RECOVERY_IVL_MSEC, array)
|
242
|
-
rc.should == 0
|
243
|
-
array[0].should == value
|
244
|
-
end
|
245
|
-
end # context using option ZMQ::RECOVERY_IVL_MSEC
|
246
|
-
|
247
|
-
else # version3 or higher
|
248
|
-
|
249
|
-
context "using option ZMQ::IPV4ONLY" do
|
250
|
-
it "should enable use of IPV6 sockets when set to 0" do
|
251
|
-
value = 0
|
252
|
-
socket.setsockopt ZMQ::IPV4ONLY, value
|
253
|
-
array = []
|
254
|
-
rc = socket.getsockopt(ZMQ::IPV4ONLY, array)
|
255
|
-
rc.should == 0
|
256
|
-
array[0].should == value
|
257
|
-
end
|
258
|
-
|
259
|
-
it "should default to a value of 1" do
|
260
|
-
value = 1
|
261
|
-
array = []
|
262
|
-
rc = socket.getsockopt(ZMQ::IPV4ONLY, array)
|
263
|
-
rc.should == 0
|
264
|
-
array[0].should == value
|
265
|
-
end
|
266
|
-
|
267
|
-
it "returns -1 given a negative value" do
|
268
|
-
value = -1
|
269
|
-
rc = socket.setsockopt ZMQ::IPV4ONLY, value
|
270
|
-
rc.should == -1
|
271
|
-
end
|
183
|
+
it "should default to a value of 1" do
|
184
|
+
value = 1
|
185
|
+
array = []
|
186
|
+
rc = socket.getsockopt(ZMQ::IPV4ONLY, array)
|
187
|
+
rc.should == 0
|
188
|
+
array[0].should == value
|
189
|
+
end
|
272
190
|
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
end # context using option ZMQ::IPV4ONLY
|
191
|
+
it "returns -1 given a negative value" do
|
192
|
+
value = -1
|
193
|
+
rc = socket.setsockopt ZMQ::IPV4ONLY, value
|
194
|
+
rc.should == -1
|
195
|
+
end
|
279
196
|
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
rc = socket.getsockopt(ZMQ::LAST_ENDPOINT, array)
|
285
|
-
ZMQ::Util.resultcode_ok?(rc).should == true
|
286
|
-
endpoint_regex = %r{\Atcp://(.*):(\d+)\0\z}
|
287
|
-
array[0].should =~ endpoint_regex
|
288
|
-
Integer(array[0][endpoint_regex, 2]).should == random_port
|
289
|
-
end
|
197
|
+
it "returns -1 given a value > 1" do
|
198
|
+
value = 2
|
199
|
+
rc = socket.setsockopt ZMQ::IPV4ONLY, value
|
200
|
+
rc.should == -1
|
290
201
|
end
|
291
|
-
end #
|
202
|
+
end # context using option ZMQ::IPV4ONLY
|
292
203
|
|
204
|
+
context "using option ZMQ::LAST_ENDPOINT" do
|
205
|
+
it "should return last enpoint" do
|
206
|
+
random_port = bind_to_random_tcp_port(socket, max_tries = 500)
|
207
|
+
array = []
|
208
|
+
rc = socket.getsockopt(ZMQ::LAST_ENDPOINT, array)
|
209
|
+
ZMQ::Util.resultcode_ok?(rc).should == true
|
210
|
+
endpoint_regex = %r{\Atcp://(.*):(\d+)\0\z}
|
211
|
+
array[0].should =~ endpoint_regex
|
212
|
+
Integer(array[0][endpoint_regex, 2]).should == random_port
|
213
|
+
end
|
214
|
+
end
|
293
215
|
|
294
216
|
context "using option ZMQ::SUBSCRIBE" do
|
295
217
|
if ZMQ::SUB == socket_type
|
@@ -414,23 +336,13 @@ module ZMQ
|
|
414
336
|
array[0].should == value
|
415
337
|
end
|
416
338
|
|
417
|
-
if (ZMQ::SUB == socket_type) && version3? || (defined?(ZMQ::XSUB) && ZMQ::XSUB == socket_type)
|
418
339
|
it "should default to a value of 0" do
|
419
|
-
value = 0
|
340
|
+
value = [SUB, XSUB].include?(socket_type) ? 0 : -1
|
420
341
|
array = []
|
421
342
|
rc = socket.getsockopt(ZMQ::LINGER, array)
|
422
343
|
rc.should == 0
|
423
344
|
array[0].should == value
|
424
345
|
end
|
425
|
-
else
|
426
|
-
it "should default to a value of -1" do
|
427
|
-
value = -1
|
428
|
-
array = []
|
429
|
-
rc = socket.getsockopt(ZMQ::LINGER, array)
|
430
|
-
rc.should == 0
|
431
|
-
array[0].should == value
|
432
|
-
end
|
433
|
-
end
|
434
346
|
end # context using option ZMQ::LINGER
|
435
347
|
|
436
348
|
|
@@ -457,7 +369,8 @@ module ZMQ
|
|
457
369
|
context "using option ZMQ::BACKLOG" do
|
458
370
|
it "should set the maximum number of pending socket connections given a positive value" do
|
459
371
|
value = 200
|
460
|
-
socket.setsockopt ZMQ::BACKLOG, value
|
372
|
+
rc = socket.setsockopt ZMQ::BACKLOG, value
|
373
|
+
rc.should == 0
|
461
374
|
array = []
|
462
375
|
rc = socket.getsockopt(ZMQ::BACKLOG, array)
|
463
376
|
rc.should == 0
|
@@ -514,8 +427,8 @@ module ZMQ
|
|
514
427
|
|
515
428
|
class PollFD < FFI::Struct
|
516
429
|
layout :fd, :int,
|
517
|
-
|
518
|
-
|
430
|
+
:events, :short,
|
431
|
+
:revents, :short
|
519
432
|
end
|
520
433
|
end # module LibSocket
|
521
434
|
|