rbczmq 0.6 → 0.7
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.
- data/ext/rbczmq/context.c +0 -2
- data/ext/rbczmq/rbczmq_ext.h +8 -1
- data/ext/rbczmq/socket.c +7 -93
- data/ext/rbczmq/socket.h +0 -4
- data/lib/zmq/version.rb +1 -1
- data/test/test_socket.rb +36 -26
- metadata +5 -6
data/ext/rbczmq/context.c
CHANGED
|
@@ -303,8 +303,6 @@ static VALUE rb_czmq_ctx_socket(VALUE obj, VALUE type)
|
|
|
303
303
|
sock->state = ZMQ_SOCKET_PENDING;
|
|
304
304
|
sock->endpoint = Qnil;
|
|
305
305
|
sock->thread = rb_thread_current();
|
|
306
|
-
sock->recv_timeout = ZMQ_SOCKET_DEFAULT_TIMEOUT;
|
|
307
|
-
sock->send_timeout = ZMQ_SOCKET_DEFAULT_TIMEOUT;
|
|
308
306
|
rb_obj_call_init(socket, 0, NULL);
|
|
309
307
|
return socket;
|
|
310
308
|
}
|
data/ext/rbczmq/rbczmq_ext.h
CHANGED
|
@@ -23,8 +23,15 @@
|
|
|
23
23
|
#define ZmqAssertSysError() if (zmq_errno() != 0 && zmq_errno() != EAGAIN) ZmqRaiseSysError();
|
|
24
24
|
#define ZmqAssert(rc) \
|
|
25
25
|
if (rc == -1) { \
|
|
26
|
-
ZmqAssertSysError(); \
|
|
27
26
|
if (rc == ENOMEM) rb_memerror(); \
|
|
27
|
+
switch (zmq_errno()) { \
|
|
28
|
+
case EMTHREAD: \
|
|
29
|
+
rb_raise(rb_eZmqError, "There are no I/O thread available to complete this operation. Please initialize the ZMQ context with at least one I/O thread eg. ZMQ::Context.new(1)"); \
|
|
30
|
+
break; \
|
|
31
|
+
default : \
|
|
32
|
+
ZmqAssertSysError(); \
|
|
33
|
+
break; \
|
|
34
|
+
} \
|
|
28
35
|
return Qfalse; \
|
|
29
36
|
}
|
|
30
37
|
#define ZmqAssertObjOnAlloc(obj, wrapper) \
|
data/ext/rbczmq/socket.c
CHANGED
|
@@ -42,8 +42,6 @@ void rb_czmq_mark_sock(void *ptr)
|
|
|
42
42
|
zclock_log ("I: %s socket %p, context %p: GC mark", zsocket_type_str(sock->socket), sock, sock->ctx);
|
|
43
43
|
rb_gc_mark(sock->endpoint);
|
|
44
44
|
rb_gc_mark(sock->thread);
|
|
45
|
-
rb_gc_mark(sock->recv_timeout);
|
|
46
|
-
rb_gc_mark(sock->send_timeout);
|
|
47
45
|
}
|
|
48
46
|
}
|
|
49
47
|
|
|
@@ -219,7 +217,7 @@ static VALUE rb_czmq_socket_bind(VALUE obj, VALUE endpoint)
|
|
|
219
217
|
args.socket = sock;
|
|
220
218
|
args.endpoint = StringValueCStr(endpoint);
|
|
221
219
|
rc = (int)rb_thread_blocking_region(rb_czmq_nogvl_socket_bind, (void *)&args, RUBY_UBF_IO, 0);
|
|
222
|
-
|
|
220
|
+
ZmqAssert(rc);
|
|
223
221
|
if (sock->verbose)
|
|
224
222
|
zclock_log ("I: %s socket %p: bound \"%s\"", zsocket_type_str(sock->socket), obj, StringValueCStr(endpoint));
|
|
225
223
|
sock->state = ZMQ_SOCKET_BOUND;
|
|
@@ -303,6 +301,8 @@ try_writable:
|
|
|
303
301
|
return (VALUE)zstr_send_nowait(socket->socket, args->msg);
|
|
304
302
|
} else {
|
|
305
303
|
rb_thread_wait_fd(zsocket_fd(socket->socket));
|
|
304
|
+
if (zsocket_sndtimeo(socket->socket) != -1)
|
|
305
|
+
return (VALUE)zstr_send(socket->socket, args->msg);
|
|
306
306
|
goto try_writable;
|
|
307
307
|
}
|
|
308
308
|
#endif
|
|
@@ -326,6 +326,8 @@ try_writable:
|
|
|
326
326
|
if ((zsocket_events(socket->socket) & ZMQ_POLLOUT) == ZMQ_POLLOUT) {
|
|
327
327
|
return (VALUE)zstr_sendm(socket->socket, args->msg);
|
|
328
328
|
} else {
|
|
329
|
+
if (zsocket_sndtimeo(socket->socket) != -1)
|
|
330
|
+
return (VALUE)zstr_sendm(socket->socket, args->msg);
|
|
329
331
|
rb_thread_wait_fd(zsocket_fd(socket->socket));
|
|
330
332
|
goto try_writable;
|
|
331
333
|
}
|
|
@@ -420,6 +422,8 @@ try_readable:
|
|
|
420
422
|
return (VALUE)zlist_pop(socket->str_buffer);
|
|
421
423
|
} else {
|
|
422
424
|
rb_thread_wait_fd(zsocket_fd(socket->socket));
|
|
425
|
+
if (zsocket_rcvtimeo(socket->socket) != -1)
|
|
426
|
+
return zstr_recv(socket->socket);
|
|
423
427
|
goto try_readable;
|
|
424
428
|
}
|
|
425
429
|
#endif
|
|
@@ -784,92 +788,6 @@ static VALUE rb_czmq_socket_recv_message(VALUE obj)
|
|
|
784
788
|
return rb_czmq_alloc_message(message);
|
|
785
789
|
}
|
|
786
790
|
|
|
787
|
-
/*
|
|
788
|
-
* call-seq:
|
|
789
|
-
* sock.recv_timeout = 5 => nil
|
|
790
|
-
*
|
|
791
|
-
* Sets a receive timeout for this socket.
|
|
792
|
-
*
|
|
793
|
-
* === Examples
|
|
794
|
-
* ctx = ZMQ::Context.new
|
|
795
|
-
* sock = ctx.socket(:REP)
|
|
796
|
-
* sock.recv_timeout = 5 => nil
|
|
797
|
-
*
|
|
798
|
-
*/
|
|
799
|
-
|
|
800
|
-
static VALUE rb_czmq_socket_set_recv_timeout(VALUE obj, VALUE timeout)
|
|
801
|
-
{
|
|
802
|
-
zmq_sock_wrapper *sock = NULL;
|
|
803
|
-
GetZmqSocket(obj);
|
|
804
|
-
if (TYPE(timeout) != T_FIXNUM && TYPE(timeout) != T_FLOAT) rb_raise(rb_eTypeError, "wrong timeout type %s (expected Fixnum or Float)", RSTRING_PTR(rb_obj_as_string(timeout)));
|
|
805
|
-
sock->recv_timeout = timeout;
|
|
806
|
-
return Qnil;
|
|
807
|
-
}
|
|
808
|
-
|
|
809
|
-
/*
|
|
810
|
-
* call-seq:
|
|
811
|
-
* sock.recv_timeout => Fixnum or nil
|
|
812
|
-
*
|
|
813
|
-
* Returns the recv timeout currently associated with this socket.
|
|
814
|
-
*
|
|
815
|
-
* === Examples
|
|
816
|
-
* ctx = ZMQ::Context.new
|
|
817
|
-
* sock = ctx.socket(:REP)
|
|
818
|
-
* sock.recv_timeout = 5
|
|
819
|
-
* sock.recv_timeout => 5
|
|
820
|
-
*
|
|
821
|
-
*/
|
|
822
|
-
|
|
823
|
-
static VALUE rb_czmq_socket_recv_timeout(VALUE obj)
|
|
824
|
-
{
|
|
825
|
-
zmq_sock_wrapper *sock = NULL;
|
|
826
|
-
GetZmqSocket(obj);
|
|
827
|
-
return sock->recv_timeout;
|
|
828
|
-
}
|
|
829
|
-
|
|
830
|
-
/*
|
|
831
|
-
* call-seq:
|
|
832
|
-
* sock.send_timeout = 5 => nil
|
|
833
|
-
*
|
|
834
|
-
* Sets a send timeout for this socket.
|
|
835
|
-
*
|
|
836
|
-
* === Examples
|
|
837
|
-
* ctx = ZMQ::Context.new
|
|
838
|
-
* sock = ctx.socket(:REP)
|
|
839
|
-
* sock.send_timeout = 5 => nil
|
|
840
|
-
*
|
|
841
|
-
*/
|
|
842
|
-
|
|
843
|
-
static VALUE rb_czmq_socket_set_send_timeout(VALUE obj, VALUE timeout)
|
|
844
|
-
{
|
|
845
|
-
zmq_sock_wrapper *sock = NULL;
|
|
846
|
-
GetZmqSocket(obj);
|
|
847
|
-
if (TYPE(timeout) != T_FIXNUM && TYPE(timeout) != T_FLOAT) rb_raise(rb_eTypeError, "wrong timeout type %s (expected Fixnum or Float)", RSTRING_PTR(rb_obj_as_string(timeout)));
|
|
848
|
-
sock->send_timeout = timeout;
|
|
849
|
-
return Qnil;
|
|
850
|
-
}
|
|
851
|
-
|
|
852
|
-
/*
|
|
853
|
-
* call-seq:
|
|
854
|
-
* sock.send_timeout => Fixnum or nil
|
|
855
|
-
*
|
|
856
|
-
* Returns the send timeout currently associated with this socket.
|
|
857
|
-
*
|
|
858
|
-
* === Examples
|
|
859
|
-
* ctx = ZMQ::Context.new
|
|
860
|
-
* sock = ctx.socket(:REP)
|
|
861
|
-
* sock.send_timeout = 5
|
|
862
|
-
* sock.send_timeout => 5
|
|
863
|
-
*
|
|
864
|
-
*/
|
|
865
|
-
|
|
866
|
-
static VALUE rb_czmq_socket_send_timeout(VALUE obj)
|
|
867
|
-
{
|
|
868
|
-
zmq_sock_wrapper *sock = NULL;
|
|
869
|
-
GetZmqSocket(obj);
|
|
870
|
-
return sock->send_timeout;
|
|
871
|
-
}
|
|
872
|
-
|
|
873
791
|
/*
|
|
874
792
|
* call-seq:
|
|
875
793
|
* sock.hwm => Fixnum
|
|
@@ -1601,10 +1519,6 @@ void _init_rb_czmq_socket()
|
|
|
1601
1519
|
rb_define_method(rb_cZmqSocket, "recv_frame", rb_czmq_socket_recv_frame, 0);
|
|
1602
1520
|
rb_define_method(rb_cZmqSocket, "recv_frame_nonblock", rb_czmq_socket_recv_frame_nonblock, 0);
|
|
1603
1521
|
rb_define_method(rb_cZmqSocket, "recv_message", rb_czmq_socket_recv_message, 0);
|
|
1604
|
-
rb_define_method(rb_cZmqSocket, "recv_timeout=", rb_czmq_socket_set_recv_timeout, 1);
|
|
1605
|
-
rb_define_method(rb_cZmqSocket, "recv_timeout", rb_czmq_socket_recv_timeout, 0);
|
|
1606
|
-
rb_define_method(rb_cZmqSocket, "send_timeout=", rb_czmq_socket_set_send_timeout, 1);
|
|
1607
|
-
rb_define_method(rb_cZmqSocket, "send_timeout", rb_czmq_socket_send_timeout, 0);
|
|
1608
1522
|
|
|
1609
1523
|
rb_define_method(rb_cZmqSocket, "hwm", rb_czmq_socket_opt_hwm, 0);
|
|
1610
1524
|
rb_define_method(rb_cZmqSocket, "hwm=", rb_czmq_socket_set_opt_hwm, 1);
|
data/ext/rbczmq/socket.h
CHANGED
|
@@ -22,12 +22,8 @@ typedef struct {
|
|
|
22
22
|
#endif
|
|
23
23
|
VALUE endpoint;
|
|
24
24
|
VALUE thread;
|
|
25
|
-
VALUE recv_timeout;
|
|
26
|
-
VALUE send_timeout;
|
|
27
25
|
} zmq_sock_wrapper;
|
|
28
26
|
|
|
29
|
-
#define ZMQ_SOCKET_DEFAULT_TIMEOUT Qnil
|
|
30
|
-
|
|
31
27
|
#define ZmqAssertSocket(obj) ZmqAssertType(obj, rb_cZmqSocket, "ZMQ::Socket")
|
|
32
28
|
#define GetZmqSocket(obj) \
|
|
33
29
|
ZmqAssertSocket(obj); \
|
data/lib/zmq/version.rb
CHANGED
data/test/test_socket.rb
CHANGED
|
@@ -3,6 +3,42 @@
|
|
|
3
3
|
require File.join(File.dirname(__FILE__), 'helper')
|
|
4
4
|
|
|
5
5
|
class TestZmqSocket < ZmqTestCase
|
|
6
|
+
def test_recv_timeout
|
|
7
|
+
ctx = ZMQ::Context.new
|
|
8
|
+
rep = ctx.bind(:REP, "inproc://test.socket-recv-timeout")
|
|
9
|
+
start = Time.now.to_f
|
|
10
|
+
rep.rcvtimeo = 300
|
|
11
|
+
rep.recv
|
|
12
|
+
elapsed = Time.now.to_f - start
|
|
13
|
+
assert_in_delta elapsed, 0.29, 0.32
|
|
14
|
+
ensure
|
|
15
|
+
ctx.destroy
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def test_send_timeout
|
|
19
|
+
ctx = ZMQ::Context.new
|
|
20
|
+
rep = ctx.socket(:REP)
|
|
21
|
+
rep.hwm = 1
|
|
22
|
+
rep.bind("inproc://test.socket-send-timeout")
|
|
23
|
+
req = ctx.connect(:REQ, "inproc://test.socket-send-timeout")
|
|
24
|
+
# Cannot test much other than normal transfer's not disrupted
|
|
25
|
+
req.sndtimeo = 100
|
|
26
|
+
req.send "msg"
|
|
27
|
+
assert_equal "msg", rep.recv
|
|
28
|
+
ensure
|
|
29
|
+
ctx.destroy
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def test_connect_no_io_thread
|
|
33
|
+
ctx = ZMQ::Context.new(0)
|
|
34
|
+
sock = ctx.socket(:REP)
|
|
35
|
+
assert_raises ZMQ::Error do
|
|
36
|
+
sock.bind("tcp://127.0.0.1:*")
|
|
37
|
+
end
|
|
38
|
+
ensure
|
|
39
|
+
ctx.destroy
|
|
40
|
+
end
|
|
41
|
+
|
|
6
42
|
def test_fd
|
|
7
43
|
ctx = ZMQ::Context.new
|
|
8
44
|
sock = ctx.socket(:REP)
|
|
@@ -54,32 +90,6 @@ class TestZmqSocket < ZmqTestCase
|
|
|
54
90
|
ctx.destroy
|
|
55
91
|
end
|
|
56
92
|
|
|
57
|
-
def test_recv_timeout
|
|
58
|
-
ctx = ZMQ::Context.new
|
|
59
|
-
sock = ctx.socket(:REP)
|
|
60
|
-
assert_nil sock.recv_timeout
|
|
61
|
-
sock.recv_timeout = 10
|
|
62
|
-
assert_equal 10, sock.recv_timeout
|
|
63
|
-
assert_raises TypeError do
|
|
64
|
-
sock.recv_timeout = :x
|
|
65
|
-
end
|
|
66
|
-
ensure
|
|
67
|
-
ctx.destroy
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
def test_send_timeout
|
|
71
|
-
ctx = ZMQ::Context.new
|
|
72
|
-
sock = ctx.socket(:REP)
|
|
73
|
-
assert_nil sock.send_timeout
|
|
74
|
-
sock.send_timeout = 10
|
|
75
|
-
assert_equal 10, sock.send_timeout
|
|
76
|
-
assert_raises TypeError do
|
|
77
|
-
sock.send_timeout = :x
|
|
78
|
-
end
|
|
79
|
-
ensure
|
|
80
|
-
ctx.destroy
|
|
81
|
-
end
|
|
82
|
-
|
|
83
93
|
def test_gc_context_reaped
|
|
84
94
|
pub = ZMQ::Context.new.socket(:PUB)
|
|
85
95
|
GC.start
|
metadata
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rbczmq
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
hash:
|
|
4
|
+
hash: 5
|
|
5
5
|
prerelease:
|
|
6
6
|
segments:
|
|
7
7
|
- 0
|
|
8
|
-
-
|
|
9
|
-
version: "0.
|
|
8
|
+
- 7
|
|
9
|
+
version: "0.7"
|
|
10
10
|
platform: ruby
|
|
11
11
|
authors:
|
|
12
12
|
- "Lourens Naud\xC3\xA9"
|
|
@@ -15,7 +15,7 @@ autorequire:
|
|
|
15
15
|
bindir: bin
|
|
16
16
|
cert_chain: []
|
|
17
17
|
|
|
18
|
-
date: 2012-05-
|
|
18
|
+
date: 2012-05-12 00:00:00 Z
|
|
19
19
|
dependencies:
|
|
20
20
|
- !ruby/object:Gem::Dependency
|
|
21
21
|
name: rake-compiler
|
|
@@ -173,7 +173,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
173
173
|
requirements: []
|
|
174
174
|
|
|
175
175
|
rubyforge_project:
|
|
176
|
-
rubygems_version: 1.8.
|
|
176
|
+
rubygems_version: 1.8.15
|
|
177
177
|
signing_key:
|
|
178
178
|
specification_version: 3
|
|
179
179
|
summary: "Ruby extension for CZMQ - High-level C Binding for \xC3\x98MQ (http://czmq.zeromq.org)"
|
|
@@ -204,4 +204,3 @@ test_files:
|
|
|
204
204
|
- test/test_threading.rb
|
|
205
205
|
- test/test_timer.rb
|
|
206
206
|
- test/test_zmq.rb
|
|
207
|
-
has_rdoc: true
|