[zeromq-dev] ZeroMQ/4.0.0 rc1 is now available

Pieter Hintjens ph at imatix.com
Fri Sep 20 16:49:56 CEST 2013

Hi all,

I'm happy to announce that ZMQ/4.0 is out the door, as a release candidate.

You'll find the packages at the usual place.

The changes are summarized here: http://zeromq.org/docs:changes-4-0-0.
This release should be API and network compatible with 3.2 stable, and
network compatible with 2.2 and 2.1 stable.

Thanks to everyone who helped on this!


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:


* 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:

* 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

* The regression test suite has been significantly extended and improved.

* Contexts can now be terminated in forked child processes. See:

* 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:

* 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

* PLAIN - plain-text username + password authentication. See

* 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:


Socket options to configure CURVE security on client or server:

  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

More information about the zeromq-dev mailing list