ZeroMQ v4.3.0 Release Notes

Release Date: 2018-11-28 // over 5 years ago
  • ๐Ÿš€ 0MQ version 4.3.0 stable, released on 2018/11/28

    The following DRAFT APIs have been marked as STABLE and will not change
    anymore:

    • ZMQ_MSG_T_SIZE context option (see doc/zmq_ctx_get.txt)
    • ZMQ_THREAD_AFFINITY_CPU_ADD and ZMQ_THREAD_AFFINITY_CPU_REMOVE (Posix only)
      ๐Ÿšš context options, to add/remove CPUs to the affinity set of the I/O threads.
      See doc/zmq_ctx_set.txt and doc/zmq_ctx_get.txt for details.
    • ZMQ_THREAD_NAME_PREFIX (Posix only) context option, to add a specific
      integer prefix to the background threads names, to easily identify them.
      See doc/zmq_ctx_set.txt and doc/zmq_ctx_get.txt for details.
    • ZMQ_GSSAPI_PRINCIPAL_NAMETYPE and ZMQ_GSSAPI_SERVICE_PRINCIPAL_NAMETYPE
      socket options, for the corresponding GSSAPI features. Additional
      definitions for principal name types:
      • ZMQ_GSSAPI_NT_HOSTBASED
      • ZMQ_GSSAPI_NT_USER_NAME
      • ZMQ_GSSAPI_NT_KRB5_PRINCIPAL
        ๐Ÿ‘€ See doc/zmq_gssapi.txt for details.
    • ZMQ_BINDTODEVICE socket option (Linux only), which will bind the
      ๐Ÿง socket(s) to the specified interface. Allows to use Linux VRF, see:
      ๐Ÿ“š https://www.kernel.org/doc/Documentation/networking/vrf.txt
      NOTE: requires the program to be ran as root OR with CAP_NET_RAW
    • zmq_timers_* APIs. These functions can be used for cross-platforms timed
      ๐Ÿ‘€ callbacks. See doc/zmq_timers.txt for details.
    • The following socket monitor events:
      • ZMQ_EVENT_HANDSHAKE_FAILED_NO_DETAIL: unknown errors during handshake.
      • ZMQ_EVENT_HANDSHAKE_SUCCEEDED: Handshake completed with authentication.
      • ZMQ_EVENT_HANDSHAKE_FAILED_PROTOCOL: Protocol errors with peers or ZAP.
      • ZMQ_EVENT_HANDSHAKE_FAILED_AUTH: Failed authentication requests.
        See doc/zmq_socket_monitor.txt for more details and error codes.
    • zmq_stopwatch_intermediate which returns the time elapsed without stopping
      the stopwatch.
    • zmq_proxy_steerable command 'STATISTICS' to retrieve stats about the amount
      of messages and bytes sent and received by the proxy.
      See doc/zmq_proxy_steerable.txt for more information.

    ๐Ÿ— The build-time configuration option to select the poller has been split, and
    ๐Ÿ†• new API_POLLER (CMake) and --with-api-poller (autoconf) options will now
    ๐Ÿ“Š determine what system call is used to implement the zmq_poll/zmq_poller APIs.
    The previous POLLER and --with-poller options now only affects the
    internal I/O thread. In case API_POLLER is not specified, the behaviour keeps
    ๐Ÿš€ backward compatibility intact and will be the same as with previous releases.

    0๏ธโƒฃ The non-default "poll" poller for the internal I/O thread (note: NOT for the
    ๐Ÿ“Š zmq_poll/zmq_poller user APIs!) has been disabled on Windows as WSAPoll does
    ๐Ÿ‘€ not report connection failures. For more information see:

    - https://bugs.python.org/issue16507

    ๐Ÿ†• New epoll implementation for Windows, using the following implementation:
    https://github.com/piscisaureus/wepoll/tree/v1.5.4
    ๐Ÿ‘ท To use this, select "epoll" as the poller option in the build system.
    Note for distributors: the wepoll source code is embedded and distributed.
    It is licensed under the BSD-2-Clause and thus it is compatible with LGPL-3.0.
    ๐Ÿ— Note that, if selected at build time, the license text must be distributed
    with the binary in accordance to the license terms. A copy can be found at:
    external/wepoll/license.txt

    ๐Ÿ—„ The pre-made Visual Studio solutions file are deprecated, and users are
    encouraged to use the CMake solution generation feature instead.

    ๐Ÿ†• New DRAFT (see NEWS for 4.2.0) socket options:

    • ZMQ_ROUTER_NOTIFY to deliver a notification when a peer connects and/or
      disconnects in the form of a routing id plus a zero-length frame.
    • ZMQ_MULTICAST_LOOP to control whether the data sent should be looped back
      on local listening sockets for UDP multicast sockets (ZMQ_RADIO).
      See doc/zmq_setsockopt.txt and doc/zmq_getsockopt.txt for details.

    New perf tool, perf/benchmark_radix_tree, to measure the performance of the
    different internal implementations of the trie algorithm used to track
    ๐Ÿ‘ subscriptions. Requires a compiler that supports C++11.

    ๐Ÿ†• New autoconf flag "--enable-force-CXX98-compat" which will force -std=gnu++98
    ๐Ÿ‘ and, if the compiler supports them (clang++ at the moment), it will also add
    -Wc++98-compat -Wc++98-compat-pedantic so that compatibility with C++98 can
    โœ… be tested.

    ๐Ÿ’… Many, many coding style, duplication and static analysis improvements.

    ๐Ÿ Many, many improvements to the CMake build system, especially on Windows.

    โœ… Many, many improvements to unit tests.

    ๐Ÿ›  Fixed #3036 - Compilation error when -pedantic is used.

    Fixed #3028 - Failure when zmq_poller_destroy is called after zmq_ctx_term.

    ๐Ÿ›  Fixed #2989 - CMake: Linker PDB install rule does not work when Visual Studio
    generators are used.

    ๐Ÿ›  Fixed #3045 - configure.ac: search for dladdr only when using libunwind.

    ๐Ÿ›  Fixed #3060 - REQ sockets terminate TCP connection after first heartbeat if
    ZMQ_HEARTBEAT_IVL is set.

    ๐Ÿ›  Fixed #2212 - UDP: need ability to specify bind address separately from
    multicast address for multi-homed hosts.

    ๐Ÿ›  Fixed #2891 - UDP: address name resolution is limited to dotted IPv4 rather
    than being capable of IPv4, IPv6, and hostname lookup.

    ๐Ÿ›  Fixed #3085 - autoconf/CMake getrandom test does not check if it's working but
    only for its presence.

    ๐Ÿ›  Fixed #3090 - compilation broken with Solaris Studio.

    Fixed #3094 - UDP: pass interface via IP[V6]_MULTICAST_IF if provided.

    ๐Ÿ›  Fixed #3061 - implement ZMTP 3.1 ping/pong context sending/receiving.

    ๐Ÿ›  Fixed #2188 - Added documentation for new zmq_poller API.

    Fixed #3088 - zmq_poller_add/zmq_poller_modify should reject invalid events
    arguments.

    Fixed #3042 - Fixed compilation on ARM with ZMQ_ATOMIC_PTR_MUTEX.

    Fixed #3107 - test_immediate_3/test_reconnect_inproc do not terminate with
    ๐Ÿ POLL as the I/O thread poller under Windows.

    ๐Ÿ›  Fixed #3046 - Aborts when iOS abuses EBADF to report a socket has been
    reclaimed.

    Fixed #3136 - Cannot set ZMQ_HEARTBEAT_TTL to more than 655.3 seconds.

    ๐Ÿ›  Fixed #3083 - link with -latomic when needed.

    ๐Ÿ›  Fixed #3162 - build failure with MUSL libc.

    Fixed #3158 - -1 value of ZMQ_RECONNECT_IVL was not correctly handled on some
    platforms.

    ๐Ÿ›  Fixed #3170 - improved documentation for ZMQ_PAIR.

    ๐Ÿ›  Fixed #3168 - correctly use symbols map on Debian/kFreeBSD and Debian/HURD
    to avoid exporting standard library symbols.

    ๐Ÿ›  Fixed #3168 - correctly process ZMTP 3.1 cancel/subscribe commands.

    ๐Ÿ›  Fixed #3171 - improve documentation for ZMQ_CONFLATE.

    ๐Ÿ›  Fixed #2876 - stack overflow on Windows 64.

    ๐Ÿ›  Fixed #3191 - race condition with received message causes
    ZMQ_CONNECT_ROUTING_ID to be assigned to wrong socket.

    Fixed #3005 - added documentation for new zmq_timers_* API.

    ๐Ÿ›  Fixed #3222 - use /Z7 debug on Release builds too on Windows (CMake).

    ๐Ÿ›  Fixed #3226 - possible PGM receiver crash.

    ๐Ÿ›  Fixed #3236 - UDP dish socket can't bind to a multicast port already in use.

    ๐Ÿ›  Fixed #3242 - improve HWM documentation.

    Fixed #2488 - improve zmq_msg_send doc return value documentation.

    ๐Ÿ›  Fixed #3268 - HWM in ZMQ_DGRAM socket does not respect multipart message.

    Fixed #3284 - added support for ZMQ_MULTICAST_HOPS with UDP sockets.

    ๐Ÿ›  Fixed #3245 - use-after-free reported in zmq::pipe_t::terminate.

    ๐Ÿ›  Fixed #1400 - use patricia trie for subscription to improve performances and
    ๐Ÿ— memory usage. Note: only active in DRAFT builds for now.

    ๐Ÿ›  Fixed #3263 - fix abort on Windows when a large TCP read is requested and
    fails.

    ๐Ÿ›  Fixed #3312 - fix build on Android Things 1.06 with Termux.