ØMQ/2.0.7 (beta) released

I'm happy to announce the release of ØMQ version 2.0.7.

The new version is available immediately to download on the website, at:


Please note that due to incompatible API and ABI changes in this release, all language bindings will need to be updated to work with ØMQ 2.0.7. As these are maintained by the community it may take a few days for everyone to catch up.

A big thank you to all our contributors, and special thanks to Martin Sustrik for putting it all together!

Highlights of the 2.0.7 release:


  • 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.


  • 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.


  • 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.

As always, a full list of changes may be found in the ChangeLog included in the distribution tarball, or in Git.