Compare commits

...

11 Commits

Author SHA1 Message Date
Pieter Hintjens
c0c8ce5508 File was missing from Makefile.am 2013-09-20 16:41:08 +02:00
Pieter Hintjens
66b1bc6d7f Added link to security tutorial 2013-09-20 16:15:53 +02:00
Pieter Hintjens
f5ecc826d9 Merge pull request #1 from hintjens/master
Preparation for 4.0.0 release
2013-09-20 07:06:48 -07:00
Pieter Hintjens
a31fe9565a Source distribution was broken 2013-09-20 16:03:14 +02:00
Pieter Hintjens
2f4905500d Version number is 4.0.0 2013-09-20 16:02:55 +02:00
Pieter Hintjens
c10a3ec526 Updated NEWS for 4.0.0 2013-09-20 15:53:27 +02:00
Pieter Hintjens
e0676a2b26 Renamed new socket options to be clearer
* ZMQ_REQ_STRICT was negative option (default 1) which goes against
  the standard, where defaults are zero. I renamed this to
  ZMQ_REQ_RELAXED.

* ZMQ_REQ_REQUEST_IDS felt clumsy and describes the technical solution
  rather than the problem/requirement. I changed to ZMQ_REQ_CORRELATE
  which seems more explicit.
2013-09-20 15:50:25 +02:00
Pieter Hintjens
b411a3561d Removed inaccurate note in zmq_poll man page 2013-09-20 15:35:20 +02:00
Pieter Hintjens
4ce9b42405 Built zmq_send_const man page properly 2013-09-20 15:35:11 +02:00
Pieter Hintjens
fef4fa8fc5 Renamed test_connect_delay to test_immediate
* The ZMQ_CONNECT_DELAY option was renamed to ZMQ_IMMEDIATE
2013-09-20 15:34:55 +02:00
Pieter Hintjens
4298f71cbf Updated NEWS for 3.2.x releases 2013-09-20 13:28:25 +02:00
17 changed files with 189 additions and 51 deletions

6
.gitignore vendored
View File

@ -43,7 +43,7 @@ tests/test_invalid_rep
tests/test_msg_flags tests/test_msg_flags
tests/test_ts_context tests/test_ts_context
tests/test_connect_resolve tests/test_connect_resolve
tests/test_connect_delay tests/test_immediate
tests/test_term_endpoint tests/test_term_endpoint
tests/test_router_mandatory tests/test_router_mandatory
tests/test_disconnect_inproc tests/test_disconnect_inproc
@ -60,8 +60,8 @@ tests/test_spec_pushpull
tests/test_spec_rep tests/test_spec_rep
tests/test_spec_req tests/test_spec_req
tests/test_spec_router tests/test_spec_router
tests/test_req_request_ids tests/test_req_correlate
tests/test_req_strict tests/test_req_relaxed
tests/test_fork tests/test_fork
tests/test_conflate tests/test_conflate
tests/test_inproc_connect tests/test_inproc_connect

View File

@ -579,7 +579,7 @@ endif()
enable_testing() enable_testing()
set(tests set(tests
test_system test_system
test_connect_delay test_immediate
test_connect_resolve test_connect_resolve
test_ctx_destroy test_ctx_destroy
test_ctx_options test_ctx_options
@ -592,8 +592,8 @@ set(tests
test_pair_inproc test_pair_inproc
test_pair_tcp test_pair_tcp
test_probe_router test_probe_router
test_req_request_ids test_req_correlate
test_req_strict test_req_relaxed
test_reqrep_device test_reqrep_device
test_reqrep_inproc test_reqrep_inproc
test_reqrep_tcp test_reqrep_tcp

144
NEWS
View File

@ -1,3 +1,145 @@
0MQ version 4.0.0 (RC1), released on 2013/09/20
===============================================
Major changes
-------------
* New wire level protocol, ZMTP/3.0, see http://rfc.zeromq.org/spec:23.
Does not yet implement the SUBSCRIBE, CANCEL, PING, and PONG commands.
* New security framework, from plain user+password to strong encryption,
see section below. See http://hintjens.com/blog:49 for a tutorial.
* New ZMQ_STREAM socket type for working as a TCP client or server. See:
tests/test_stream.cpp.
Improvements
------------
* You can now connect to an inproc:// endpoint that does not already
exist. This means inproc:// no longer needs careful set-up, but it may
break code that relied on the old behaviour. See:
tests/test_inproc_connect.cpp.
* Libzmq now checks socket types at connection time, so that trying to
connect a 'wrong' socket type will fail.
* New zmq_ctx_shutdown API method will shutdown a context and send ETERM
to blocking calls, without blocking. Use zmq_ctx_term to finalise the
process.
* The regression test suite has been significantly extended and improved.
* Contexts can now be terminated in forked child processes. See:
tests/test_fork.cpp.
* zmq_disconnect now respects the linger setting on sockets.
* New zmq_send_const API method to send constant data (without copying).
See: tests/test_inproc_connect.cpp.
* Added CMake support for static libraries.
* Added test cases for socket semantics as defined in RFCs 28, 29, 30, 31.
See: tests/test_spec_*.cpp.
* New socket option, ZMQ_PROBE_ROUTER triggers an empty message on connect.
See: tests/test_probe_router.cpp.
* New socket option, ZMQ_REQ_CORRELATE allows for correlation of replies
from a REP socket. See: tests/test_req_correlate.cpp.
* New socket option, ZMQ_REQ_RELAXED, lets you disable the state machine
on a REQ socket, so you can send multiple requests without waiting for
replies, and without getting an EFSM error. See:
tests/test_req_relaxed.cpp.
* New socket option, ZMQ_CONFLATE restricts the outgoing and incoming
socket buffers to a single message. See: tests/test_conflate.cpp.
Deprecated Options
------------------
* ZMQ_IPV4ONLY deprecated and renamed to ZMQ_IPV6 so that options are
consistently "off" by default.
* ZMQ_DELAY_ATTACH_ON_CONNECT deprecated, and renamed to ZMQ_IMMEDIATE.
See: tests/test_immediate.cpp.
Security Framework
------------------
Based on new ZMTP wire level protocol that negotiates a security
"mechanism" between client and server before exchanging any other data.
Security mechanisms are extensible. ZMTP defines three by default:
* NULL - classic ZeroMQ, with no authentication. See
http://rfc.zeromq.org/spec:23.
* PLAIN - plain-text username + password authentication. See
http://rfc.zeromq.org/spec:24.
* CURVE - secure authentication and encryption based on elliptic curve
cryptography, using the Curve25519 algorithm from Daniel Bernstein and
based on CurveCP's security handshake. See http://rfc.zeromq.org/spec:25,
http://rfc.zeromq.org/spec:26, and http://curvecp.org.
Authentication is done by pluggable "authenticators" that connect to libzmq
over an inproc endpoint, see http://rfc.zeromq.org/spec:27.
Socket options to configure PLAIN security on client or server:
* ZMQ_PLAIN_SERVER, ZMQ_PLAIN_USERNAME, ZMQ_PLAIN_PASSWORD. See
tests/test_security_plain.
Socket options to configure CURVE security on client or server:
* ZMQ_CURVE_SERVER, ZMQ_CURVE_PUBLICKEY, ZMQ_CURVE_SECRETKEY,
ZMQ_CURVE_SERVERKEY. See tests/test_security_curve.cpp.
Socket options to configure "domain" for ZAP handler:
* ZMQ_ZAP_DOMAIN, see tests/test_security_null.cpp.
Support for encoding/decoding CURVE binary keys to ASCII:
* zmq_z85_encode, zmq_z85_decode.
Other issues addressed in this release
--------------------------------------
* LIBZMQ-525 Multipart upstreaming from XSUB to XPUB
0MQ version 3.2.4 stable, released on 2013/09/20
================================================
* LIBZMQ-84 (Windows) Assertion failed: Address already in use at signaler.cpp:80
* LIBZMQ-456 ZMQ_XPUB_VERBOSE does not propagate in a tree of XPUB/XSUB devices
* LIBZMQ-532 (Windows) critical section not released on error
* LIBZMQ-569 Detect OpenPGM 5.2 system library
* LIBZMQ-563 Subscribers sometimes stopped receiving messages (aka LIBZMQ-541)
* LIBZMQ-XXX Added support for Travis Continuous Integration
* LIBZMQ-XXX Several improvements to MSVC support
0MQ version 3.2.3 stable, released on 2013/05/02
================================================
Issues addressed in this release
--------------------------------
* LIBZMQ-526 Assertion failure "Invalid argument (tcp_connecter.cpp:285)"
* LIBZMQ-446 Setting the DSCP bits by default causes CAP_NET_ADMIN error
* LIBZMQ-496 Crash on heavy socket opening/closing: Device or resource busy (mutex.hpp:90)
* LIBZMQ-462 test_connect_delay fails at test_connect_delay.cpp:80
* LIBZMQ-497 Messages getting dropped
* LIBZMQ-488 signaler.cpp leaks the win32 Event Handle
* LIBZMQ-476 zmq_disconnect has no effect for inproc sockets
* LIBZMQ-475 zmq_disconnect does not sent unsubscribe messages
0MQ version 3.2.2 stable, released on 2012/11/23 0MQ version 3.2.2 stable, released on 2012/11/23
================================================ ================================================
@ -13,7 +155,6 @@ Issues addressed in this release
* LIBZMQ-450 lt-test_monitor: fails with assertion at test_monitor.cpp:81 * LIBZMQ-450 lt-test_monitor: fails with assertion at test_monitor.cpp:81
* LIBZMQ-451 ZMQ_ROUTER_MANDATORY blocks forever * LIBZMQ-451 ZMQ_ROUTER_MANDATORY blocks forever
* LIBZMQ-452 test_connect_delay.cpp:175:12: error: 'sleep' was not declared in this scope * LIBZMQ-452 test_connect_delay.cpp:175:12: error: 'sleep' was not declared in this scope
* LIBZMQ-456 ZMQ_XPUB_VERBOSE does not propagate in a tree of XPUB/XSUB devices
* LIBZMQ-458 lt-test_router_mandatory fails with assertion at test_router_mandatory.cpp:53 * LIBZMQ-458 lt-test_router_mandatory fails with assertion at test_router_mandatory.cpp:53
* LIBZMQ-459 Assertion failed: encoder (stream_engine.cpp:266 * LIBZMQ-459 Assertion failed: encoder (stream_engine.cpp:266
* LIBZMQ-464 PUB socket with HWM set leaks memory * LIBZMQ-464 PUB socket with HWM set leaks memory
@ -21,6 +162,7 @@ Issues addressed in this release
* LIBZMQ-468 ZMQ_XPUB_VERBOSE & unsubscribe * LIBZMQ-468 ZMQ_XPUB_VERBOSE & unsubscribe
* LIBZMQ-472 Segfault in zmq_poll in REQ to ROUTER dialog * LIBZMQ-472 Segfault in zmq_poll in REQ to ROUTER dialog
0MQ version 3.2.1 (RC2), released on 2012/10/15 0MQ version 3.2.1 (RC2), released on 2012/10/15
=============================================== ===============================================

View File

@ -3,7 +3,7 @@ MAN3 = zmq_bind.3 zmq_unbind.3 zmq_connect.3 zmq_disconnect.3 zmq_close.3 \
zmq_msg_init.3 zmq_msg_init_data.3 zmq_msg_init_size.3 \ zmq_msg_init.3 zmq_msg_init_data.3 zmq_msg_init_size.3 \
zmq_msg_move.3 zmq_msg_copy.3 zmq_msg_size.3 zmq_msg_data.3 zmq_msg_close.3 \ zmq_msg_move.3 zmq_msg_copy.3 zmq_msg_size.3 zmq_msg_data.3 zmq_msg_close.3 \
zmq_msg_send.3 zmq_msg_recv.3 \ zmq_msg_send.3 zmq_msg_recv.3 \
zmq_send.3 zmq_recv.3 \ zmq_send.3 zmq_recv.3 zmq_send_const.3 \
zmq_msg_get.3 zmq_msg_set.3 zmq_msg_more.3 \ zmq_msg_get.3 zmq_msg_set.3 zmq_msg_more.3 \
zmq_getsockopt.3 zmq_setsockopt.3 \ zmq_getsockopt.3 zmq_setsockopt.3 \
zmq_socket.3 zmq_socket_monitor.3 zmq_poll.3 \ zmq_socket.3 zmq_socket_monitor.3 zmq_poll.3 \

View File

@ -140,6 +140,7 @@ Sending and receiving messages::
linkzmq:zmq_msg_recv[3] linkzmq:zmq_msg_recv[3]
linkzmq:zmq_send[3] linkzmq:zmq_send[3]
linkzmq:zmq_recv[3] linkzmq:zmq_recv[3]
linkzmq:zmq_send_const[3]
.Input/output multiplexing .Input/output multiplexing
0MQ provides a mechanism for applications to multiplex input/output events over 0MQ provides a mechanism for applications to multiplex input/output events over

View File

@ -352,8 +352,8 @@ Default value:: 1 (true)
Applicable socket types:: all, when using TCP transports. Applicable socket types:: all, when using TCP transports.
ZMQ_DELAY_ATTACH_ON_CONNECT: Retrieve attach-on-connect value ZMQ_IMMEDIATE: Retrieve attach-on-connect value
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Retrieve the state of the attach on connect value. If set to `1`, will delay the Retrieve the state of the attach on connect value. If set to `1`, will delay the
attachment of a pipe on connect until the underlying connection has completed. attachment of a pipe on connect until the underlying connection has completed.
This will cause the socket to block if there are no other connections, but will This will cause the socket to block if there are no other connections, but will

View File

@ -73,10 +73,6 @@ NOTE: The _zmq_poll()_ function may be implemented or emulated using operating
system interfaces other than _poll()_, and as such may be subject to the limits system interfaces other than _poll()_, and as such may be subject to the limits
of those interfaces in ways not defined in this documentation. of those interfaces in ways not defined in this documentation.
NOTE: The _zmq_send()_ function will clear all pending events on a socket. Thus,
if you use _zmq_poll()_ to monitor input on a socket, use it before output as
well, and process all events after each _zmq_poll()_ call.
RETURN VALUE RETURN VALUE
------------ ------------
Upon successful completion, the _zmq_poll()_ function shall return the number Upon successful completion, the _zmq_poll()_ function shall return the number

View File

@ -1,5 +1,5 @@
zmq_send_const(3) zmq_send_const(3)
=========== =================
NAME NAME

View File

@ -14,7 +14,7 @@ SYNOPSIS
Caution: All options, with the exception of ZMQ_SUBSCRIBE, ZMQ_UNSUBSCRIBE, Caution: All options, with the exception of ZMQ_SUBSCRIBE, ZMQ_UNSUBSCRIBE,
ZMQ_LINGER, ZMQ_ROUTER_MANDATORY, ZMQ_PROBE_ROUTER, ZMQ_XPUB_VERBOSE, ZMQ_LINGER, ZMQ_ROUTER_MANDATORY, ZMQ_PROBE_ROUTER, ZMQ_XPUB_VERBOSE,
ZMQ_REQ_STRICT, ZMQ_REQ_REQUEST_IDS only take effect for subsequent socket ZMQ_REQ_CORRELATE, and ZMQ_REQ_RELAXED, only take effect for subsequent socket
bind/connects. bind/connects.
Specifically, security options take effect for subsequent bind/connect calls, Specifically, security options take effect for subsequent bind/connect calls,
@ -461,11 +461,11 @@ Default value:: 0
Applicable socket types:: ZMQ_XPUB Applicable socket types:: ZMQ_XPUB
ZMQ_REQ_REQUEST_IDS: enable extra request identity frames ZMQ_REQ_CORRELATE: match replies with requests
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The default behavior of REQ sockets is to rely on the ordering of messages The default behavior of REQ sockets is to rely on the ordering of messages to
to match requests and responses and that is usually sufficient. When this option match requests and responses and that is usually sufficient. When this option
is set to 1, the REQ socket will prefix outgoing messages with an extra frame is set to 1, the REQ socket will prefix outgoing messages with an extra frame
containing a request id. That means the full message is (request id, 0, containing a request id. That means the full message is (request id, 0,
user frames...). The REQ socket will discard all incoming messages that don't user frames...). The REQ socket will discard all incoming messages that don't
@ -478,25 +478,25 @@ Default value:: 0
Applicable socket types:: ZMQ_REQ Applicable socket types:: ZMQ_REQ
ZMQ_REQ_STRICT: enforce strict alternation between request and reply ZMQ_REQ_RELAXED: relax strict alternation between request and reply
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
When set to 1, a REQ socket does not allow initiating a new request with By default, a REQ socket does not allow initiating a new request with
_zmq_send(3)_ until the reply to the previous one has been received. _zmq_send(3)_ until the reply to the previous one has been received.
When set to 0, sending another message is allowed and has the effect of When set to 1, sending another message is allowed and has the effect of
disconnecting the underlying connection to the peer from which the reply was disconnecting the underlying connection to the peer from which the reply was
expected, triggering a reconnection attempt on transports that support it. expected, triggering a reconnection attempt on transports that support it.
The request-reply state machine is reset and a new request is sent to the The request-reply state machine is reset and a new request is sent to the
next available peer. next available peer.
If set to 0, also enable ZMQ_REQ_REQUEST_IDS to ensure correct If set to 1, also enable ZMQ_REQ_CORRELATE to ensure correct matching of
matching of requests and replies. Otherwise a late reply to an aborted request requests and replies. Otherwise a late reply to an aborted request can be
can be reported as the reply to the superseding request. reported as the reply to the superseding request.
[horizontal] [horizontal]
Option value type:: int Option value type:: int
Option value unit:: 0, 1 Option value unit:: 0, 1
Default value:: 1 Default value:: 0
Applicable socket types:: ZMQ_REQ Applicable socket types:: ZMQ_REQ

View File

@ -72,8 +72,8 @@ typedef unsigned __int16 uint16_t;
/******************************************************************************/ /******************************************************************************/
/* Version macros for compile-time API version detection */ /* Version macros for compile-time API version detection */
#define ZMQ_VERSION_MAJOR 3 #define ZMQ_VERSION_MAJOR 4
#define ZMQ_VERSION_MINOR 3 #define ZMQ_VERSION_MINOR 0
#define ZMQ_VERSION_PATCH 0 #define ZMQ_VERSION_PATCH 0
#define ZMQ_MAKE_VERSION(major, minor, patch) \ #define ZMQ_MAKE_VERSION(major, minor, patch) \
@ -277,8 +277,8 @@ ZMQ_EXPORT int zmq_msg_set (zmq_msg_t *msg, int option, int optval);
#define ZMQ_CURVE_SECRETKEY 49 #define ZMQ_CURVE_SECRETKEY 49
#define ZMQ_CURVE_SERVERKEY 50 #define ZMQ_CURVE_SERVERKEY 50
#define ZMQ_PROBE_ROUTER 51 #define ZMQ_PROBE_ROUTER 51
#define ZMQ_REQ_REQUEST_IDS 52 #define ZMQ_REQ_CORRELATE 52
#define ZMQ_REQ_STRICT 53 #define ZMQ_REQ_RELAXED 53
#define ZMQ_CONFLATE 54 #define ZMQ_CONFLATE 54
#define ZMQ_ZAP_DOMAIN 55 #define ZMQ_ZAP_DOMAIN 55

View File

@ -88,7 +88,7 @@ libzmq_la_SOURCES = \
dealer.hpp \ dealer.hpp \
xsub.hpp \ xsub.hpp \
ypipe.hpp \ ypipe.hpp \
ypipe_flat.hpp \ ypipe_base.hpp \
yqueue.hpp \ yqueue.hpp \
address.cpp \ address.cpp \
clock.cpp \ clock.cpp \

View File

@ -198,16 +198,16 @@ int zmq::req_t::xsetsockopt (int option_, const void *optval_, size_t optvallen_
bool is_int = (optvallen_ == sizeof (int)); bool is_int = (optvallen_ == sizeof (int));
int value = is_int? *((int *) optval_): 0; int value = is_int? *((int *) optval_): 0;
switch (option_) { switch (option_) {
case ZMQ_REQ_REQUEST_IDS: case ZMQ_REQ_CORRELATE:
if (is_int && value >= 0) { if (is_int && value >= 0) {
request_id_frames_enabled = (value != 0); request_id_frames_enabled = (value != 0);
return 0; return 0;
} }
break; break;
case ZMQ_REQ_STRICT: case ZMQ_REQ_RELAXED:
if (is_int && value >= 0) { if (is_int && value >= 0) {
strict = (value != 0); strict = (value == 0);
return 0; return 0;
} }
break; break;

View File

@ -14,7 +14,7 @@ noinst_PROGRAMS = test_system \
test_invalid_rep \ test_invalid_rep \
test_msg_flags \ test_msg_flags \
test_connect_resolve \ test_connect_resolve \
test_connect_delay \ test_immediate \
test_last_endpoint \ test_last_endpoint \
test_term_endpoint \ test_term_endpoint \
test_linger \ test_linger \
@ -34,8 +34,8 @@ noinst_PROGRAMS = test_system \
test_spec_dealer \ test_spec_dealer \
test_spec_router \ test_spec_router \
test_spec_pushpull \ test_spec_pushpull \
test_req_request_ids \ test_req_correlate \
test_req_strict \ test_req_relaxed \
test_conflate \ test_conflate \
test_inproc_connect test_inproc_connect
@ -59,7 +59,7 @@ test_invalid_rep_SOURCES = test_invalid_rep.cpp
test_linger_SOURCES = test_linger.cpp test_linger_SOURCES = test_linger.cpp
test_msg_flags_SOURCES = test_msg_flags.cpp test_msg_flags_SOURCES = test_msg_flags.cpp
test_connect_resolve_SOURCES = test_connect_resolve.cpp test_connect_resolve_SOURCES = test_connect_resolve.cpp
test_connect_delay_SOURCES = test_connect_delay.cpp test_immediate_SOURCES = test_immediate.cpp
test_last_endpoint_SOURCES = test_last_endpoint.cpp test_last_endpoint_SOURCES = test_last_endpoint.cpp
test_term_endpoint_SOURCES = test_term_endpoint.cpp test_term_endpoint_SOURCES = test_term_endpoint.cpp
test_monitor_SOURCES = test_monitor.cpp test_monitor_SOURCES = test_monitor.cpp
@ -78,8 +78,8 @@ test_spec_rep_SOURCES = test_spec_rep.cpp
test_spec_dealer_SOURCES = test_spec_dealer.cpp test_spec_dealer_SOURCES = test_spec_dealer.cpp
test_spec_router_SOURCES = test_spec_router.cpp test_spec_router_SOURCES = test_spec_router.cpp
test_spec_pushpull_SOURCES = test_spec_pushpull.cpp test_spec_pushpull_SOURCES = test_spec_pushpull.cpp
test_req_request_ids_SOURCES = test_req_request_ids.cpp test_req_correlate_SOURCES = test_req_correlate.cpp
test_req_strict_SOURCES = test_req_strict.cpp test_req_relaxed_SOURCES = test_req_relaxed.cpp
test_conflate_SOURCES = test_conflate.cpp test_conflate_SOURCES = test_conflate.cpp
test_inproc_connect_SOURCES = test_inproc_connect.cpp test_inproc_connect_SOURCES = test_inproc_connect.cpp
if !ON_MINGW if !ON_MINGW

View File

@ -117,7 +117,7 @@ int main (void)
// Set the key flag // Set the key flag
val = 1; val = 1;
rc = zmq_setsockopt (from, ZMQ_DELAY_ATTACH_ON_CONNECT, &val, sizeof(val)); rc = zmq_setsockopt (from, ZMQ_IMMEDIATE, &val, sizeof(val));
assert (rc == 0); assert (rc == 0);
// Connect to the invalid socket // Connect to the invalid socket
@ -170,9 +170,9 @@ int main (void)
rc = zmq_setsockopt (frontend, ZMQ_LINGER, &zero, sizeof (zero)); rc = zmq_setsockopt (frontend, ZMQ_LINGER, &zero, sizeof (zero));
assert (rc == 0); assert (rc == 0);
// Frontend connects to backend using DELAY_ATTACH_ON_CONNECT // Frontend connects to backend using IMMEDIATE
int on = 1; int on = 1;
rc = zmq_setsockopt (frontend, ZMQ_DELAY_ATTACH_ON_CONNECT, &on, sizeof (on)); rc = zmq_setsockopt (frontend, ZMQ_IMMEDIATE, &on, sizeof (on));
assert (rc == 0); assert (rc == 0);
rc = zmq_bind (backend, "tcp://127.0.0.1:5560"); rc = zmq_bind (backend, "tcp://127.0.0.1:5560");
assert (rc == 0); assert (rc == 0);

View File

@ -32,7 +32,7 @@ int main (void)
assert (router); assert (router);
int enabled = 1; int enabled = 1;
int rc = zmq_setsockopt (req, ZMQ_REQ_REQUEST_IDS, &enabled, sizeof (int)); int rc = zmq_setsockopt (req, ZMQ_REQ_CORRELATE, &enabled, sizeof (int));
assert (rc == 0); assert (rc == 0);
int rcvtimeo = 100; int rcvtimeo = 100;

View File

@ -28,12 +28,11 @@ int main (void)
void *req = zmq_socket (ctx, ZMQ_REQ); void *req = zmq_socket (ctx, ZMQ_REQ);
assert (req); assert (req);
int disabled = 0; int enabled = 1;
int rc = zmq_setsockopt (req, ZMQ_REQ_STRICT, &disabled, sizeof (int)); int rc = zmq_setsockopt (req, ZMQ_REQ_RELAXED, &enabled, sizeof (int));
assert (rc == 0); assert (rc == 0);
int enabled = 1; rc = zmq_setsockopt (req, ZMQ_REQ_CORRELATE, &enabled, sizeof (int));
rc = zmq_setsockopt (req, ZMQ_REQ_REQUEST_IDS, &enabled, sizeof (int));
assert (rc == 0); assert (rc == 0);
rc = zmq_bind (req, "tcp://127.0.0.1:5555"); rc = zmq_bind (req, "tcp://127.0.0.1:5555");

View File

@ -1,4 +1,4 @@
EXTRA_DIST = curve_keygen.c z85_codec.h EXTRA_DIST = curve_keygen.c
INCLUDES = -I$(top_srcdir)/include INCLUDES = -I$(top_srcdir)/include