ØMQ Changelog

What's new in ØMQ 4.1.5

Sep 17, 2016
  • Fixed #1723 - Family is not set when resolving NIC on Android.
  • Fixed #1806 - uninitialised read in curve getsockopt.
  • Fixed #1807 - build broken with GCC 6.
  • Fixed #1831 - potential assertion failure with latest libsodium.
  • Fixed #1850 - detection issues with tweetnacl/libsodium.
  • Fixed #1877 - Avoid terminating connections prematurely
  • Fixed #1887 - zmq_bind IPv4 fallback still tries IPv6
  • Fixed #1866 - fails to build on SunOS 5.10 / Solaris 10
  • Fixed #919 - ZMQ_LINGER (related to #1877)
  • Fixed #114 - cannot unbind with same endpoint with IPv6 enabled.
  • Fixed #1952 - CMake scripts not part of release tarballs
  • Fixed #2021 - Fix building on sparc32.

New in ØMQ 4.1.4 (Dec 22, 2015)

  • Fixed #1315 - socket monitor hangs if bind/setsockopt failed.
  • Fixed #1399 - assertion failure in tcp.cpp after network reconnect.
  • Fixed #1632 - build failure using latest libsodium.
  • Fixed #1644 - assertion failure in msg.cpp:390 on STREAM sockets.
  • Fixed #1661 - does not handle IPv6 link local addresses.

New in ØMQ 4.1.3 (Aug 17, 2015)

  • Fixed #1532 - getsockopt ZMQ_RCVMORE now resets all bits instead of only 32
  • Fixed #1445 - zmq::socket_base_t::connect fails on tcp ipv6 address

New in ØMQ 4.1.1 (Jun 2, 2015)

  • Fixed #1208 - fix recursion in automake packaging.
  • Fixed #1224 - crash when processing empty unsubscribe message.
  • Fixed #1213 - properties files were missing from source packages.
  • Fixed #1273 - V3 protocol handler vulnerable to downgrade attacks.
  • Fixed #1347 - lack way to get peer address.
  • Fixed #1362 - SUB socket sometimes fails to resubscribe properly.
  • Fixed #1377, #1144 - failed with WSANOTINITIALISED in some cases.
  • Fixed #1389 - PUB, PUSH sockets had slow memory leak.
  • Fixed #1382 - zmq_proxy did not terminate if there were no readers.

New in ØMQ 4.0.6 (Jun 2, 2015)

  • Fixed #1273 - V3 protocol handler vulnerable to downgrade attacks.
  • Fixed #1362 - SUB socket sometimes fails to resubscribe properly.
  • Fixed #1377, #1144 - failed with WSANOTINITIALISED in some cases.
  • Fixed #1389 - PUB, PUSH sockets had slow memory leak.
  • Fixed #1382 - zmq_proxy did not terminate if there were no readers.

New in ØMQ 4.0.5 (Oct 22, 2014)

  • Fixed #1191; CURVE mechanism does not verify short term nonces.
  • Fixed #1190; stream_engine is vulnerable to downgrade attacks.
  • Fixed #1088; assertion failure for WSAENOTSOCK on Windows.
  • Fixed #1015; race condition while connecting inproc sockets.
  • Fixed #994; bump so library number to 4.0.0
  • Fixed #939, assertion failed: !more (fq.cpp:99) after many ZAP requests.
  • Fixed #872; lost first part of message over inproc://.

New in ØMQ 4.0.4 (Mar 11, 2014)

  • Bug Fixes:
  • Fixed #909; out of tree build issue on Linux.
  • Fixed #888; hangs on terminate when inproc connected but never bound.
  • Fixed #868; assertion failure at ip.cpp:137 when using port scanner.
  • Fixed #818; fix timestamp counter on s390/s390x.
  • Fixed #817; only export zmq_* symbols.
  • Fixed #797; fixed setting TCP keepalive on Windows.
  • Fixed #775; compile error on Windows.
  • Fixed #763; when talking to a ZMTP v1 peer (libzmq 2.2), a socket would send an extra identity frame at the start of the connection.
  • Fixed LIBZMQ-576 - Crash closing a socket after zmq_msg_send returns EAGAIN (reverts LIBZMQ-497)
  • Fixed LIBZMQ-584; subscription filters getting lost on reconnection.

New in ØMQ 4.0.3 (Nov 26, 2013)

  • Bug Fixes:
  • Fixed test_many_sockets case, which failed when process socket limit was 1024.

New in ØMQ 4.0.2 (Nov 26, 2013)

  • Bug Fixes:
  • Fixed LIBZMQ-583 - improved low-res timer for Windows
  • Fixed LIBZMQ-578 - z85_decode was extremely slow
  • Fixed LIBZMQ-577 - fault in man pages.
  • Fixed LIBZMQ-574 - assertion failure when ran out of system file handles
  • Fixed LIBZMQ-571 - test_stream failing in some cases
  • Fixed LIBZMQ-569 - Socket server crashes with random client data and when talking to 2.2 versions
  • Fixed LIBZMQ-39 - Bad file descriptor during shutdown
  • Pulled expected failing test_linger.cpp from release
  • Reduced pause time in tests to allow "make check" to run faster

New in ØMQ 4.0.1 (Oct 9, 2013)

  • Changes:
  • Updated CURVE mechanism to track revised RFC 27 (INITIATE vouch).
  • Fixed LIBZMQ-567, adding abstract namespaces for IPC sockets on Linux.
  • Added zmq_z85_encode and zmq_z85_decode to core libzmq API.
  • Added zmq_curve_keypair to core libzmq API.
  • Bumped library ABI version to 4:0:1.
  • Bug fixes:
  • Fixed some build/test errors on OS/X + Clang++.
  • Fixed LIBZMQ-565, typo in code.
  • Fixed LIBZMQ-566, dealer-to-router connections sometimes failing.
  • Fixed builds for AIX, MSVC 2008, OS/X with clang++, Solaris.
  • Improved CURVE handshake error handling

New in ØMQ 4.0.0 RC 1 (Sep 21, 2013)

  • 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

New in ØMQ 3.2.4 (Sep 20, 2013)

  • 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

New in ØMQ 3.2.3 (May 2, 2013)

  • 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

New in ØMQ 3.2.2 (Jan 10, 2013)

  • Fixed issues:
  • LIBZMQ-384 No meta data for ZMQ_EVENT_DISCONNECTED monitor event
  • LIBZMQ-414 Error in ARM/Thumb2 assembly (atomic_ptr.hpp)
  • LIBZMQ-417 zmq_assert (!incomplete_in) in session_base.cpp 228
  • LIBZMQ-447 socket_base_t::recv() packet loss and memory leak at high receiving rate
  • LIBZMQ-448 Builds fail on older versions of GCC
  • LIBZMQ-449 Builds fail on AIX
  • LIBZMQ-450 lt-test_monitor: fails with assertion at test_monitor.cpp:81
  • LIBZMQ-451 ZMQ_ROUTER_MANDATORY blocks forever
  • 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-459 Assertion failed: encoder (stream_engine.cpp:266
  • LIBZMQ-464 PUB socket with HWM set leaks memory
  • LIBZMQ-465 PUB/SUB results in 80-90% of CPU load
  • LIBZMQ-468 ZMQ_XPUB_VERBOSE & unsubscribe
  • LIBZMQ-472 Segfault in zmq_poll in REQ to ROUTER dialog

New in ØMQ 3.1.0 Beta (Dec 19, 2011)

  • Reverted functionality:
  • Wire format changes. The 0MQ 3.1 wire format is identical to that of 0MQ 2.1.
  • LABELs and COMMANDs have been removed.
  • Explicit identies are re-introduced, however they can be used only for explicit routing, not for durable sockets.
  • The ZMQ_ROUTER and ZMQ_DEALER socket types are once again aliases for ZMQ_XREQ and ZMQ_XREP.
  • New functionality:
  • The zmq_getmsgopt() function has been introduced.
  • Experimental IPv6 support has been introduced. This is disabled by default, see the zmq_setsockopt() documentation for enabling it.
  • Other changes:
  • The default HWM for all socket types has been set to 1000.
  • Many bug fixes.
  • Building:
  • The dependency on libuuid has been removed.
  • Support for building on Android, and with MSVC 10 has been added.

New in ØMQ 3.0 (Jul 13, 2011)

  • Cleans-up and simplifies the API, introduces subscription forwarding, and removes a system limitation on socketpair buffers

New in ØMQ 2.1.3 (Mar 22, 2011)

  • Bug fixes:
  • Fix to PUSH sockets, which would sometimes deliver tail frames of a multipart message to new subscribers (Martin Sustrik).
  • Fix to PUB sockets, which would sometimes deliver tail frames of a multipart message to new subscribers (Martin Sustrik).
  • Windows build was broken due to EPROTONOSUPPORT not being defined. This has now been fixed (Martin Sustrik).
  • Various fixes to make OpenVMS port work (Brett Cameron).
  • Corrected Reference Manual to note that ZMQ_LINGER socket option may be set at any time, not just before connecting/binding (Pieter Hintjens).
  • Fix to C++ binding to properly close sockets (Guido Goldstein).
  • Removed obsolete assert from pgm_socket.cpp (Martin Sustrik).
  • Changes:
  • Removed stand-alone devices (/devices subdirectory) from distribution. These undocumented programs remain available in older packages (Pieter Hintjens).
  • OpenPGM default rate raised to 40mbps by default (Steven McCoy).
  • ZMQ_DEALER and ZMQ_ROUTER macros provided to ease upgrade to 0MQ/3.0. These are scheduled to replace ZMQ_XREQ and ZMQ_XREP (Pieter Hintjens).
  • Added man page for zmq_device(3) which was hereto undocumented (Pieter Hintjens).
  • Removed zmq_queue(3), zmq_forwarder(3), zmq_streamer(3) man pages (Pieter Hintjens).
  • OpenPGM Integration:
  • Upgraded OpenPGM to version 5.1.114 (Steven McCoy, Mikko Koppanen).
  • Build system now calls OpenPGM build process directly, allowing easier future upgrades of OpenPGM (Mikko Koppanen).
  • Build system allows configuration with arbitrary versions of OpenPGM (./configure --with-pgm=libpgm-x.y.z) (Mikko Koppanen).
  • OpenPGM uses new PGM_ODATA_MAX_RTE controlling original data instead of PGM_TXW_MAX_RTE covering entire channel (Steven McCoy).
  • Building:
  • 0MQ builds properly on FreeBSD (Mikko Koppanen).

New in ØMQ 2.1.2 (Mar 7, 2011)

  • Bug fixes:
  • 0MQ now correctly handles durable inproc sockets; previously it ignored explicit identities on inproc sockets.
  • Various memory leaks were fixed.
  • OpenPGM sender/receiver creation fixed.

New in ØMQ 2.1.1 (Feb 24, 2011)

  • New functionality:
  • New socket option ZMQ_RECONNECT_IVL_MAX added, allows for exponential back-off strategy when reconnecting.
  • New socket option ZMQ_RECOVERY_IVL_MSEC added, as a fine-grained counterpart to ZMQ_RECOVERY_IVL (for multicast transports).
  • If memory is exhausted, 0MQ warns with an explicit message before aborting the process.
  • Bug fixes:
  • 0MQ no longer asserts in mailbox.cpp when multiple peers connect with the same identity.
  • 0MQ no longer asserts when rejecting an oversized message.
  • 0MQ no longer asserts in pipe.cpp when the swap fills up.
  • zmq_poll now works correctly with an empty poll set.
  • Many more.
  • Building:
  • 0MQ now builds correctly on CentOS, Debian 6, and SunOS/gcc3.
  • Added WithOpenPGM configuration into MSVC builds.

New in ØMQ 2.0.10 (Oct 16, 2010)

  • New functionality:
  • Upgrade OpenPGM to 2.1.28~dfsg (Martin Lucina)
  • Added a ZMQ_VERSION macro to zmq.h for compile-time API version detection (Martin Sustrik, Gonzalo Diethelm, Martin Lucina)
  • Bug fixes:
  • Fix memory leak under Windows (Taras Shpot)
  • Makefile.am: Add missing files to distribution, improve maintainer-clean (Martin Lucina)
  • Add support for RHEL6 in the spec file (Sebastian Otaegui)
  • configure.in: Do not patch libtool rpath handling (Martin Lucina)
  • Fixing the Red Hat packaging (Martin Sustrik)
  • zmq_msg_move called on uninitialised message in xrep_t::xrecv -- fixed (Max Wolf)
  • crash when closing an ypipe -- fixed (Dhammika Pathirana)
  • REQ socket can die when reply is delivered on wrong unerlying connection -- fixed (Martin Sustrik)
  • if TSC jumps backwards (in case of migration to a different CPU core) latency peak may occur -- fixed (Martin Sustrik)
  • values of RATE, RECOVERY_IVL and SWAP options are checked for negative values (Martin Sustrik)

New in ØMQ 2.0.9 (Sep 6, 2010)

  • Bug fixes:
  • Broken device numbering fixed.
  • HP-UX/AIX build fixed.
  • Handling multi-part messages in forwarder and streamer devices fixed.
  • Couple of minor bug fixes, see the ChangeLog for details.

New in ØMQ 2.0.7 (Jun 5, 2010)

  • Distribution:
  • The core documentation has been updated with many clarifications, especially in the description of the functionality provided by the different socket types.
  • The version of OpenPGM bundled with 0MQ has been updated to the 2.1.26 release.
  • Building:
  • GCC-isms have been removed from the code and build system across the board; ØMQ should now build with no issues when using compilers other than GCC.
  • Interface:
  • The zmq_init() function now has only a single parameter; the number of ØMQ I/O threads to create in the context being initialised. The app_threads and flags parameters have been removed.
  • The ZMQ_P2P socket type has been renamed to ZMQ_PAIR.
  • The ZMQ_LWM socket option has been removed; the low water mark for a socket is now computed automatically by ØMQ.
  • A zmq_getsockopt() function has been added.
  • New functionality:
  • Multi-hop request/reply is fully supported. This feature allows the insertion of device(s) between ZMQ_REQ and ZMQ_REP sockets thus enabling scenarios such as multi-threaded server, shared service queue, and other interesting messaging topologies. The entire infrastructure is transparent to applications.
  • Multi-part messages. A ØMQ message may now be composed of 1 or more message parts; each message part is an independent zmq_msg_t in its own right. ØMQ ensures atomic delivery of messages; peers shall receive either all message parts of a message or none at all. This feature allows for seamless zero-copy message passing when data are scattered in memory, and is an important building block for multi-hop messaging topologies.
  • Context termination and ETERM. The zmq_term() function has been changed to interrupt any blocking operations on open sockets, causing them to return the newly defined ETERM error code. This allows for orderly application termination, especially when multiple application threads are involved.

New in ØMQ 2.0.6 (Mar 17, 2010)

  • All-new documentation and many enhancements

New in ØMQ 2.0 Beta 2 (Jan 18, 2010)

  • Aside of several bugfixes it provides new IPC (inter-process) transport that significantly reduces latency when passing messages between processes on the same box.

New in ØMQ 2.0 Beta 1 (Jan 7, 2010)

  • Includes Common Lisp API, zero-copy for large messages and more.

New in ØMQ 2.0 Alpha 3 (Sep 24, 2009)

  • Features multicast bus and support for request/reply scenarios.

New in ØMQ 2.0 Alpha 2 (Sep 18, 2009)

  • Check it to try out new multicast support, subscription mechanism, forwarder device and more.

New in ØMQ 1.0.1 (Sep 8, 2009)

  • This version brings Lua, Tcl and Delphi bindings to ØMQ. In addition it fixes several bugs found in version 1.0.0.

New in ØMQ 1.0.0 (Jul 15, 2009)

  • Aside of several bug fixes and improvements new version comes with integrated build of OpenPGM reliable multicast library.

New in ØMQ 0.6.1 (May 29, 2009)

  • Ruby and COBOL language bindings have been added.

New in ØMQ 0.6 (Apr 9, 2009)

  • This version introduces load-balancing capabilities, on-disk offload for the large queues, support for Mono and OpenVMS etc.

New in ØMQ 0.5 (Feb 6, 2009)

  • New version introduces .NET compatibility, PGM reliable multicast, AMQP and SCTP support, congestion management as well as several other features.

New in ØMQ 0.4 (Dec 10, 2008)

  • Most importantly, it's the first ØMQ package licensed under LGPL. Aside of that ØMQ/0.4 adds support for new platforms (AIX, HP-UX, OpenBSD, QNX Neutrino, Windows) and uses advanced polling mechanisms to cope with thousands of simultaneous network connections.

New in ØMQ 0.3.1 (Sep 26, 2008)

  • It's backwards compatible with version 0.3 and adds some usability features like allowing to use network interface name instead of IP address, single centralised include file, man pages, etc.