Release notes for ØMQ/4.0.0

0MQ version 4.0.0 (RC1), released on 2013/09/20

Major changes

  • 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. See: tests/test_inproc_connect.cpp. NOTE: this is a breaking change in the API. If your application depended on inproc connects failing, you must change it to try to bind instead (a successful bind means there was no previous socket bound to the socket.
  • 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:

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