zmq 2.0.9 → 2.1.0

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 (2) hide show
  1. data/rbzmq.c +277 -31
  2. metadata +3 -3
data/rbzmq.c CHANGED
@@ -136,18 +136,25 @@ static VALUE context_initialize (int argc_, VALUE* argv_, VALUE self_)
136
136
  * call-seq:
137
137
  * zmq.close() -> nil
138
138
  *
139
- * Terminates the 0MQ context. If there are no longer any sockets open within
140
- * context at the time zmq_term() is called then context shall be shut down and
141
- * all associated resources shall be released immediately.
142
- *
143
- * Otherwise, the following applies:
144
- * - The close() function shall return immediately.
145
- * - Any blocking operations currently in progress on sockets open within
146
- * context shall return immediately with an error code of ETERM.
147
- * - With the exception of ZMQ::Socket#close(), any further operations on
148
- * sockets open within context shall fail with an error code of ETERM.
149
- * - The actual shutdown of context, and release of any associated resources, shall
150
- * be delayed until the last socket within it is closed with ZMQ::Socket#close().
139
+ * Terminates the 0MQ context.
140
+ *
141
+ * Context termination is performed in the following steps:
142
+ *
143
+ * 1. Any blocking operations currently in progress on sockets open
144
+ * within context shall return immediately with an error code of
145
+ * ETERM. With the exception of ZMQ::Socket#close(), any further operations on
146
+ * sockets open within context shall fail with an error code of ETERM.
147
+ *
148
+ * 2. After interrupting all blocking calls, zmq_term() shall block until
149
+ * the following conditions are satisfied:
150
+ * * All sockets open within context have been closed with ZMQ::Socket#close().
151
+ * * For each socket within context, all messages sent by the
152
+ * application with ZMQ::Socket#send() have either been physically
153
+ * transferred to a network peer, or the socket’s linger period
154
+ * set with the ZMQ::LINGER socket option has expired.
155
+ *
156
+ * For further details regarding socket linger behaviour refer to the
157
+ * ZMQ::LINGER option in ZMQ::Socket#setsockopt().
151
158
  */
152
159
  static VALUE context_close (VALUE self_)
153
160
  {
@@ -556,36 +563,36 @@ static VALUE context_socket (VALUE self_, VALUE type_)
556
563
  * is connected to at least one _node_. When a pipeline stage is connected to
557
564
  * multiple _nodes_ data is load-balanced among all connected _nodes_.
558
565
  *
559
- * == ZMQ::DOWNSTREAM
566
+ * == ZMQ::PUSH
560
567
  *
561
- * A socket of type ZMQ::DOWNSTREAM is used by a pipeline node to send messages
568
+ * A socket of type ZMQ::PUSH is used by a pipeline node to send messages
562
569
  * to downstream pipeline nodes. Messages are load-balanced to all connected
563
570
  * downstream nodes. The ZMQ::recv() function is not implemented for this socket
564
571
  * type.
565
572
  *
566
- * When a ZMQ::DOWNSTREAM socket enters an exceptional state due to having
573
+ * When a ZMQ::PUSH socket enters an exceptional state due to having
567
574
  * reached the high water mark for all downstream _nodes_, or if there are no
568
575
  * downstream _nodes_ at all, then any send() operations on the socket shall
569
576
  * block until the exceptional state ends or at least one downstream _node_
570
577
  * becomes available for sending; messages are not discarded.
571
578
  *
572
- * === Summary of ZMQ::DOWNSTREAM characteristics
573
- * [Compatible peer sockets] ZMQ::UPSTREAM
579
+ * === Summary of ZMQ::PUSH characteristics
580
+ * [Compatible peer sockets] ZMQ::PULL
574
581
  * [Direction] Unidirectional
575
582
  * [Send/receive pattern] Send only
576
583
  * [Incoming routing strategy] N/A
577
584
  * [Outgoing routing strategy] Load-balanced
578
585
  * [ZMQ::HWM option action] Block
579
586
  *
580
- * == ZMQ::UPSTREAM
587
+ * == ZMQ::PULL
581
588
  *
582
- * A socket of type ZMQ::UPSTREAM is used by a pipeline _node_ to receive messages
589
+ * A socket of type ZMQ::PULL is used by a pipeline _node_ to receive messages
583
590
  * from upstream pipeline _nodes_. Messages are fair-queued from among all
584
591
  * connected upstream nodes. The send() function is not implemented for
585
592
  * this socket type.
586
593
  *
587
- * === Summary of ZMQ::UPSTREAM characteristics
588
- * [Compatible peer sockets] ZMQ::DOWNSTREAM
594
+ * === Summary of ZMQ::PULL characteristics
595
+ * [Compatible peer sockets] ZMQ::PUSH
589
596
  * [Direction] Unidirectional
590
597
  * [Send/receive pattern] Receive only
591
598
  * [Incoming routing strategy] Fair-queued
@@ -608,7 +615,7 @@ static VALUE context_socket (VALUE self_, VALUE type_)
608
615
  * send() operations on the socket shall block until the peer becomes
609
616
  * available for sending; messages are not discarded.
610
617
  *
611
- * *NOTE* ZMQ_PAIR sockets are experimental, and are currently missing several
618
+ * *NOTE* ZMQ::PAIR sockets are experimental, and are currently missing several
612
619
  * features such as auto-reconnection.
613
620
  *
614
621
  * === Summary of ZMQ::PAIR characteristics
@@ -773,6 +780,102 @@ static VALUE context_socket (VALUE self_, VALUE type_)
773
780
  * [Default value] 0
774
781
  * [Applicable socket types] all
775
782
  *
783
+ * == ZMQ::LINGER: Retrieve linger period for socket shutdown
784
+ * The ZMQ::LINGER option shall retrieve the linger period for the specified
785
+ * socket. The linger period determines how long pending messages which have
786
+ * yet to be sent to a peer shall linger in memory after a socket is closed
787
+ * with ZMQ::Socket#close(), and further affects the termination of the
788
+ * socket’s context with ZMQ#close(). The following outlines the different
789
+ * behaviours:
790
+ *
791
+ * * The default value of −1 specifies an infinite linger period.
792
+ * Pending messages shall not be discarded after a call to ZMQ::Socket#close();
793
+ * attempting to terminate the socket’s context with ZMQ::Context#close() shall block
794
+ * until all pending messages have been sent to a peer.
795
+ *
796
+ * * The value of 0 specifies no linger period. Pending messages shall be
797
+ * discarded immediately when the socket is closed with ZMQ::Socket#close.
798
+ *
799
+ * * Positive values specify an upper bound for the linger period in
800
+ * milliseconds. Pending messages shall not be discarded after a call to
801
+ * ZMQ::Socket#close(); attempting to terminate the socket’s context with
802
+ * ZMQ::Context#close() shall block until either all pending messages have been sent
803
+ * to a peer, or the linger period expires, after which any pending messages
804
+ * shall be discarded.
805
+ *
806
+ * [Option value type] Integer
807
+ * [Option value unit] milliseconds
808
+ * [Default value] -1 (infinite)
809
+ * [Applicable socket types] all
810
+ *
811
+ * == ZMQ::RECONNECT_IVL: Retrieve reconnection interval
812
+ * The ZMQ::RECONNECT_IVL option shall retrieve the reconnection interval for
813
+ * the specified socket. The reconnection interval is the maximum period 0MQ
814
+ * shall wait between attempts to reconnect disconnected peers when using
815
+ * connection−oriented transports.
816
+ *
817
+ * [Option value type] Integer
818
+ * [Option value unit] milliseconds
819
+ * [Default value] 100
820
+ * [Applicable socket types] all, only for connection-oriented transports
821
+ *
822
+ * == ZMQ::BACKLOG: Retrieve maximum length of the queue of outstanding connections
823
+ * The ZMQ::BACKLOG option shall retrieve the maximum length of the queue of
824
+ * outstanding peer connections for the specified socket; this only applies to
825
+ * connection−oriented transports. For details refer to your operating system
826
+ * documentation for the listen function.
827
+ *
828
+ * [Option value type] Integer
829
+ * [Option value unit] connections
830
+ * [Default value] 100
831
+ * [Applicable socket types] all, only for connection-oriented transports
832
+ *
833
+ * == ZMQ::FD: Retrieve file descriptor associated with the socket
834
+ * The ZMQ::FD option shall retrieve the file descriptor associated with the
835
+ * specified socket. The returned file descriptor can be used to integrate the
836
+ * socket into an existing event loop; the 0MQ library shall signal any pending
837
+ * events on the socket in an edge−triggered fashion by making the file
838
+ * descriptor become ready for reading.
839
+ *
840
+ * === Note
841
+ * The ability to read from the returned file descriptor does not necessarily
842
+ * indicate that messages are available to be read from, or can be written to,
843
+ * the underlying socket; applications must retrieve the actual event state
844
+ * with a subsequent retrieval of the ZMQ::EVENTS option.
845
+ *
846
+ * === Caution
847
+ * The returned file descriptor is intended for use with a poll or similar
848
+ * system call only. Applications must never attempt to read or write data
849
+ * to it directly.
850
+ *
851
+ * [Option value type] int on POSIX systems, SOCKT on Windows
852
+ * [Option value unit] N/A
853
+ * [Default value] N/A
854
+ * [Applicable socket types] all
855
+ *
856
+ * == ZMQ::EVENTS: Retrieve socket event state
857
+ * The ZMQ::EVENTS option shall retrieve the event state for the specified
858
+ * socket. The returned value is a bit mask constructed by OR’ing a combination
859
+ * of the following event flags:
860
+ *
861
+ * === ZMQ::POLLIN
862
+ * Indicates that at least one message may be received from the specified
863
+ * socket without blocking.
864
+ *
865
+ * == ZMQ::POLLOUT
866
+ * Indicates that at least one message may be sent to the specified socket
867
+ * without blocking.
868
+ *
869
+ * The combination of a file descriptor returned by the ZMQ::FD option being
870
+ * ready for reading but no actual events returned by a subsequent retrieval of
871
+ * the ZMQ::EVENTS option is valid; applications should simply ignore this case
872
+ * and restart their polling operation/event loop.
873
+ *
874
+ * [Option value type] uint32_t
875
+ * [Option value unit] N/A (flags)
876
+ * [Default value] N/A
877
+ * [Applicable socket types] all
878
+ *
776
879
  */
777
880
  static VALUE socket_getsockopt (VALUE self_, VALUE option_)
778
881
  {
@@ -793,6 +896,72 @@ static VALUE socket_getsockopt (VALUE self_, VALUE option_)
793
896
  case ZMQ_MCAST_LOOP:
794
897
  case ZMQ_SNDBUF:
795
898
  case ZMQ_RCVBUF:
899
+ #if ZMQ_VERSION >= 20100
900
+ case ZMQ_FD:
901
+ {
902
+ #ifdef _WIN32
903
+ SOCKET optval;
904
+ #else
905
+ int optval;
906
+ #endif
907
+ size_t optvalsize = sizeof(optval);
908
+
909
+ rc = zmq_getsockopt (s, NUM2INT (option_), (void *)&optval,
910
+ &optvalsize);
911
+
912
+ if (rc != 0) {
913
+ rb_raise (rb_eRuntimeError, "%s", zmq_strerror (zmq_errno ()));
914
+ return Qnil;
915
+ }
916
+
917
+ if (NUM2INT (option_) == ZMQ_RCVMORE)
918
+ retval = optval ? Qtrue : Qfalse;
919
+ else
920
+ retval = INT2NUM (optval);
921
+ }
922
+ break;
923
+ case ZMQ_EVENTS:
924
+ {
925
+ uint32_t optval;
926
+ size_t optvalsize = sizeof(optval);
927
+
928
+ rc = zmq_getsockopt (s, NUM2INT (option_), (void *)&optval,
929
+ &optvalsize);
930
+
931
+ if (rc != 0) {
932
+ rb_raise (rb_eRuntimeError, "%s", zmq_strerror (zmq_errno ()));
933
+ return Qnil;
934
+ }
935
+
936
+ if (NUM2INT (option_) == ZMQ_RCVMORE)
937
+ retval = optval ? Qtrue : Qfalse;
938
+ else
939
+ retval = INT2NUM (optval);
940
+ }
941
+ break;
942
+ case ZMQ_TYPE:
943
+ case ZMQ_LINGER:
944
+ case ZMQ_RECONNECT_IVL:
945
+ case ZMQ_BACKLOG:
946
+ {
947
+ int optval;
948
+ size_t optvalsize = sizeof(optval);
949
+
950
+ rc = zmq_getsockopt (s, NUM2INT (option_), (void *)&optval,
951
+ &optvalsize);
952
+
953
+ if (rc != 0) {
954
+ rb_raise (rb_eRuntimeError, "%s", zmq_strerror (zmq_errno ()));
955
+ return Qnil;
956
+ }
957
+
958
+ if (NUM2INT (option_) == ZMQ_RCVMORE)
959
+ retval = optval ? Qtrue : Qfalse;
960
+ else
961
+ retval = INT2NUM (optval);
962
+ }
963
+ break;
964
+ #endif
796
965
  {
797
966
  int64_t optval;
798
967
  size_t optvalsize = sizeof(optval);
@@ -1003,6 +1172,56 @@ static VALUE socket_getsockopt (VALUE self_, VALUE option_)
1003
1172
  * [Default value] 0
1004
1173
  * [Applicable socket types] all
1005
1174
  *
1175
+ * == ZMQ::LINGER: Set linger period for socket shutdown
1176
+ * The ZMQ::LINGER option shall set the linger period for the specified
1177
+ * socket. The linger period determines how long pending messages which have
1178
+ * yet to be sent to a peer shall linger in memory after a socket is closed
1179
+ * with ZMQ::Socket#close(), and further affects the termination of the
1180
+ * socket’s context with ZMQ#close(). The following outlines the different
1181
+ * behaviours:
1182
+ *
1183
+ * * The default value of −1 specifies an infinite linger period.
1184
+ * Pending messages shall not be discarded after a call to ZMQ::Socket#close();
1185
+ * attempting to terminate the socket’s context with ZMQ::Context#close() shall block
1186
+ * until all pending messages have been sent to a peer.
1187
+ *
1188
+ * * The value of 0 specifies no linger period. Pending messages shall be
1189
+ * discarded immediately when the socket is closed with ZMQ::Socket#close.
1190
+ *
1191
+ * * Positive values specify an upper bound for the linger period in
1192
+ * milliseconds. Pending messages shall not be discarded after a call to
1193
+ * ZMQ::Socket#close(); attempting to terminate the socket’s context with
1194
+ * ZMQ::Context#close() shall block until either all pending messages have been sent
1195
+ * to a peer, or the linger period expires, after which any pending messages
1196
+ * shall be discarded.
1197
+ *
1198
+ * [Option value type] Integer
1199
+ * [Option value unit] milliseconds
1200
+ * [Default value] -1 (infinite)
1201
+ * [Applicable socket types] all
1202
+ *
1203
+ * == ZMQ::RECONNECT_IVL: Set reconnection interval
1204
+ * The ZMQ::RECONNECT_IVL option shall set the reconnection interval for
1205
+ * the specified socket. The reconnection interval is the maximum period 0MQ
1206
+ * shall wait between attempts to reconnect disconnected peers when using
1207
+ * connection−oriented transports.
1208
+ *
1209
+ * [Option value type] Integer
1210
+ * [Option value unit] milliseconds
1211
+ * [Default value] 100
1212
+ * [Applicable socket types] all, only for connection-oriented transports
1213
+ *
1214
+ * == ZMQ::BACKLOG: Set maximum length of the queue of outstanding connections
1215
+ * The ZMQ::BACKLOG option shall set the maximum length of the queue of
1216
+ * outstanding peer connections for the specified socket; this only applies to
1217
+ * connection−oriented transports. For details refer to your operating system
1218
+ * documentation for the listen function.
1219
+ *
1220
+ * [Option value type] Integer
1221
+ * [Option value unit] connections
1222
+ * [Default value] 100
1223
+ * [Applicable socket types] all, only for connection-oriented transports
1224
+ *
1006
1225
  */
1007
1226
  static VALUE socket_setsockopt (VALUE self_, VALUE option_,
1008
1227
  VALUE optval_)
@@ -1023,14 +1242,28 @@ static VALUE socket_setsockopt (VALUE self_, VALUE option_,
1023
1242
  case ZMQ_MCAST_LOOP:
1024
1243
  case ZMQ_SNDBUF:
1025
1244
  case ZMQ_RCVBUF:
1245
+ {
1246
+ uint64_t optval = FIX2LONG (optval_);
1247
+
1248
+ // Forward the code to native 0MQ library.
1249
+ rc = zmq_setsockopt (s, NUM2INT (option_),
1250
+ (void*) &optval, sizeof (optval));
1251
+ }
1252
+ break;
1253
+
1254
+ #if ZMQ_VERSION >= 20100
1255
+ case ZMQ_LINGER:
1256
+ case ZMQ_RECONNECT_IVL:
1257
+ case ZMQ_BACKLOG:
1026
1258
  {
1027
- uint64_t optval = FIX2LONG (optval_);
1259
+ int optval = FIX2LONG (optval_);
1028
1260
 
1029
1261
  // Forward the code to native 0MQ library.
1030
1262
  rc = zmq_setsockopt (s, NUM2INT (option_),
1031
1263
  (void*) &optval, sizeof (optval));
1032
1264
  }
1033
1265
  break;
1266
+ #endif
1034
1267
 
1035
1268
  case ZMQ_IDENTITY:
1036
1269
  case ZMQ_SUBSCRIBE:
@@ -1332,12 +1565,12 @@ static VALUE socket_recv (int argc_, VALUE* argv_, VALUE self_)
1332
1565
  * call-seq:
1333
1566
  * socket.close() -> nil
1334
1567
  *
1335
- * Destroys the 0MQ socket. All active connections on the socket shall be
1336
- * terminated, and resources associated with the socket shall be released.
1337
- * Any outstanding messages sent with send() but not yet physically sent
1338
- * to the network shall be dropped. Likewise, any outstanding messages
1339
- * physically received from the network but not yet received by the
1340
- * application with recv() shall also be dropped.
1568
+ * Destroys the 0MQ socket. Any outstanding messages physically received from
1569
+ * the network but not yet received by the application with ZMQ::Socket#recv()
1570
+ * shall be discarded. The behaviour for discarding messages sent by the
1571
+ * application with ZMQ::Socket#send() but not yet physically transferred to
1572
+ * the network depends on the value of the ZMQ::LINGER socket option for the
1573
+ * socket.
1341
1574
  */
1342
1575
  static VALUE socket_close (VALUE self_)
1343
1576
  {
@@ -1391,6 +1624,14 @@ void Init_zmq ()
1391
1624
  rb_define_const (zmq_module, "RCVBUF", INT2NUM (ZMQ_RCVBUF));
1392
1625
  rb_define_const (zmq_module, "SNDMORE", INT2NUM (ZMQ_SNDMORE));
1393
1626
  rb_define_const (zmq_module, "RCVMORE", INT2NUM (ZMQ_RCVMORE));
1627
+ #if ZMQ_VERSION >= 20100
1628
+ rb_define_const (zmq_module, "FD", INT2NUM (ZMQ_FD));
1629
+ rb_define_const (zmq_module, "EVENTS", INT2NUM (ZMQ_EVENTS));
1630
+ rb_define_const (zmq_module, "TYPE", INT2NUM (ZMQ_TYPE));
1631
+ rb_define_const (zmq_module, "LINGER", INT2NUM (ZMQ_LINGER));
1632
+ rb_define_const (zmq_module, "RECONNECT_IVL", INT2NUM (ZMQ_RECONNECT_IVL));
1633
+ rb_define_const (zmq_module, "BACKLOG", INT2NUM (ZMQ_BACKLOG));
1634
+ #endif
1394
1635
 
1395
1636
  rb_define_const (zmq_module, "NOBLOCK", INT2NUM (ZMQ_NOBLOCK));
1396
1637
 
@@ -1405,12 +1646,17 @@ void Init_zmq ()
1405
1646
  #ifdef ZMQ_PUSH
1406
1647
  rb_define_const (zmq_module, "PUSH", INT2NUM (ZMQ_PUSH));
1407
1648
  rb_define_const (zmq_module, "PULL", INT2NUM (ZMQ_PULL));
1649
+
1650
+ // Deprecated
1651
+ rb_define_const (zmq_module, "UPSTREAM", INT2NUM (ZMQ_PULL));
1652
+ rb_define_const (zmq_module, "DOWNSTREAM", INT2NUM (ZMQ_PUSH));
1408
1653
  #else
1409
1654
  rb_define_const (zmq_module, "PUSH", INT2NUM (ZMQ_DOWNSTREAM));
1410
1655
  rb_define_const (zmq_module, "PULL", INT2NUM (ZMQ_UPSTREAM));
1411
- #endif
1412
1656
 
1413
- // Obsolete.
1657
+ // Deprecated
1414
1658
  rb_define_const (zmq_module, "UPSTREAM", INT2NUM (ZMQ_UPSTREAM));
1415
1659
  rb_define_const (zmq_module, "DOWNSTREAM", INT2NUM (ZMQ_DOWNSTREAM));
1660
+ #endif
1661
+
1416
1662
  }
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 2
7
+ - 1
7
8
  - 0
8
- - 9
9
- version: 2.0.9
9
+ version: 2.1.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Martin Sustrik
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-09-21 00:00:00 -07:00
18
+ date: 2010-12-05 00:00:00 -08:00
19
19
  default_executable:
20
20
  dependencies: []
21
21