From 75af6aed482ab16997c1388fe801f74d11ec12a4 Mon Sep 17 00:00:00 2001 From: Martin Lucina Date: Mon, 23 Jan 2012 08:54:14 +0100 Subject: Imported Upstream version 2.1.9 --- AUTHORS | 3 + ChangeLog | 663 +++++++++++++++++++++++++++++++ MAINTAINERS | 14 +- NEWS | 89 ++++- aclocal.m4 | 4 +- autogen.sh | 8 +- builds/msvc/Makefile.am | 4 +- builds/msvc/Makefile.in | 4 +- builds/msvc/inproc_lat/inproc_lat.vcproj | 174 ++++++++ builds/msvc/inproc_thr/inproc_thr.vcproj | 174 ++++++++ builds/msvc/libzmq/libzmq.vcproj | 4 + config/ltmain.sh | 4 +- configure | 28 +- configure.in | 6 + doc/zmq.7 | 6 +- doc/zmq.html | 158 ++++---- doc/zmq_bind.3 | 11 +- doc/zmq_bind.html | 132 +++--- doc/zmq_bind.txt | 2 + doc/zmq_close.3 | 6 +- doc/zmq_close.html | 122 +++--- doc/zmq_connect.3 | 11 +- doc/zmq_connect.html | 132 +++--- doc/zmq_connect.txt | 2 + doc/zmq_cpp.7 | 6 +- doc/zmq_cpp.html | 236 ++++++----- doc/zmq_device.3 | 6 +- doc/zmq_device.html | 132 +++--- doc/zmq_epgm.7 | 10 +- doc/zmq_epgm.html | 136 ++++--- doc/zmq_epgm.txt | 4 +- doc/zmq_errno.3 | 6 +- doc/zmq_errno.html | 122 +++--- doc/zmq_getsockopt.3 | 8 +- doc/zmq_getsockopt.html | 198 +++++---- doc/zmq_getsockopt.txt | 2 +- doc/zmq_init.3 | 6 +- doc/zmq_init.html | 122 +++--- doc/zmq_inproc.7 | 6 +- doc/zmq_inproc.html | 130 +++--- doc/zmq_ipc.7 | 6 +- doc/zmq_ipc.html | 130 +++--- doc/zmq_msg_close.3 | 6 +- doc/zmq_msg_close.html | 120 +++--- doc/zmq_msg_copy.3 | 6 +- doc/zmq_msg_copy.html | 120 +++--- doc/zmq_msg_data.3 | 6 +- doc/zmq_msg_data.html | 122 +++--- doc/zmq_msg_init.3 | 6 +- doc/zmq_msg_init.html | 124 +++--- doc/zmq_msg_init_data.3 | 6 +- doc/zmq_msg_init_data.html | 124 +++--- doc/zmq_msg_init_size.3 | 6 +- doc/zmq_msg_init_size.html | 122 +++--- doc/zmq_msg_move.3 | 6 +- doc/zmq_msg_move.html | 120 +++--- doc/zmq_msg_size.3 | 8 +- doc/zmq_msg_size.html | 124 +++--- doc/zmq_msg_size.txt | 2 +- doc/zmq_pgm.7 | 10 +- doc/zmq_pgm.html | 136 ++++--- doc/zmq_pgm.txt | 4 +- doc/zmq_poll.3 | 6 +- doc/zmq_poll.html | 124 +++--- doc/zmq_recv.3 | 6 +- doc/zmq_recv.html | 128 +++--- doc/zmq_send.3 | 6 +- doc/zmq_send.html | 128 +++--- doc/zmq_setsockopt.3 | 8 +- doc/zmq_setsockopt.html | 190 +++++---- doc/zmq_setsockopt.txt | 2 +- doc/zmq_socket.3 | 10 +- doc/zmq_socket.html | 160 ++++---- doc/zmq_socket.txt | 4 +- doc/zmq_strerror.3 | 6 +- doc/zmq_strerror.html | 124 +++--- doc/zmq_tcp.7 | 8 +- doc/zmq_tcp.html | 132 +++--- doc/zmq_tcp.txt | 2 +- doc/zmq_term.3 | 6 +- doc/zmq_term.html | 122 +++--- doc/zmq_version.3 | 6 +- doc/zmq_version.html | 124 +++--- include/zmq.h | 4 +- perf/local_thr.cpp | 2 +- src/Makefile.am | 2 + src/Makefile.in | 28 +- src/config.hpp | 7 + src/ctx.cpp | 14 +- src/io_thread.cpp | 2 +- src/ip.cpp | 20 +- src/mailbox.cpp | 366 ++--------------- src/mailbox.hpp | 26 +- src/pgm_receiver.cpp | 4 +- src/pgm_sender.cpp | 8 +- src/pgm_socket.cpp | 8 +- src/pgm_socket.hpp | 7 +- src/platform.hpp.in | 3 + src/reaper.cpp | 2 +- src/rep.cpp | 2 +- src/select.cpp | 9 +- src/signaler.cpp | 344 ++++++++++++++++ src/signaler.hpp | 63 +++ src/socket_base.cpp | 79 +++- src/socket_base.hpp | 6 +- src/swap.cpp | 8 +- src/tcp_connecter.cpp | 3 +- src/tcp_socket.cpp | 5 + src/thread.cpp | 16 +- src/windows.hpp | 152 +++++-- src/xrep.cpp | 4 - src/zmq.cpp | 24 +- tests/test_shutdown_stress.cpp | 2 +- zeromq.spec | 2 +- 114 files changed, 4049 insertions(+), 2680 deletions(-) create mode 100644 builds/msvc/inproc_lat/inproc_lat.vcproj create mode 100644 builds/msvc/inproc_thr/inproc_thr.vcproj create mode 100644 src/signaler.cpp create mode 100644 src/signaler.hpp diff --git a/AUTHORS b/AUTHORS index 43768e5..7e785bf 100644 --- a/AUTHORS +++ b/AUTHORS @@ -10,6 +10,7 @@ Bob Beaty Brian Buchanan Brett Cameron Burak Arslan +Carl Clemens Chia-liang Kao Chris Rempel Chris Wong @@ -62,6 +63,8 @@ Thijs Terlouw Toralf Wittner Tore Halvorsen Vitaly Mayatskikh +Ghislain Putois +William Roberts Credits ======= diff --git a/ChangeLog b/ChangeLog index f15734e..2349d55 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,649 @@ # Generated by Makefile. Do not edit. +commit 392c3771c22d0dfe793cc9c4ee5c27d18d38d428 +Author: Pieter Hintjens +Date: Mon Aug 29 20:25:11 2011 +0200 + + Updated NEWS for 2.1.9 + + NEWS | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit bb7f41144b513ebf07698ade91c6d6c4e20bec77 +Author: Pieter Hintjens +Date: Mon Aug 29 12:24:45 2011 +0200 + + Fixed NEWS to reflect RC status of 2.1.8 + + NEWS | 7 +++++-- + 1 files changed, 5 insertions(+), 2 deletions(-) + +commit 4df43be69c3f25a4a5f96d379a59d6c6d6f214fa +Author: Martin Sustrik +Date: Wed Aug 17 18:41:02 2011 +0200 + + Fix the PGM support on win64 + + On win64 the size of file descriptor is not the same as size of int. + The bug in PGM transport caused a runtime error because of this. + The problem is fixed now. + + Signed-off-by: Martin Sustrik + + NEWS | 2 ++ + src/pgm_receiver.cpp | 4 ++-- + src/pgm_sender.cpp | 8 ++++---- + src/pgm_socket.cpp | 8 ++++---- + src/pgm_socket.hpp | 7 ++++--- + 5 files changed, 16 insertions(+), 13 deletions(-) + +commit 024c4c91098913c7488abde75e9ef0d3fee7e195 +Author: Pieter Hintjens +Date: Wed Aug 17 16:40:09 2011 +0200 + + Fixed compile error on win32 + + src/zmq.cpp | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 323138b81ca71e036200d666b95b96c9b6e58696 +Author: Pieter Hintjens +Date: Tue Aug 16 17:45:39 2011 +0200 + + Updated NEWS for Android build + + NEWS | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 7b22dccf2fed4cd057876912991fdd61954d6dbc +Author: Mikko Koppanen +Date: Mon Aug 15 19:09:04 2011 +0200 + + Added Android support + + Signed-off-by: Mikko Koppanen + + configure.in | 6 ++++++ + src/ip.cpp | 2 +- + src/swap.cpp | 2 +- + src/thread.cpp | 2 +- + 4 files changed, 9 insertions(+), 3 deletions(-) + +commit 591e5887e6e32675a7520eac67621416f13bec35 +Author: Martin Sustrik +Date: Sun Aug 14 14:23:16 2011 +0200 + + Fixed issue 238 + + NEWS | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + +commit ebfdfdf298525c993b8827fe6c7b6f753c56ca52 +Author: Martin Sustrik +Date: Sun Aug 14 14:23:16 2011 +0200 + + select version zmq_poll reports invalid FDs + + Till now, passing invalid file descriptor to zmq_poll() + caused asseration. Now it returns error. + + Signed-off-by: Martin Sustrik + + src/zmq.cpp | 18 +++++++++++++----- + 1 files changed, 13 insertions(+), 5 deletions(-) + +commit d6fbb80a19056cad02ee32e465b12cb0ba29c419 +Author: Pieter Hintjens +Date: Sat Aug 13 00:27:13 2011 +0200 + + Fixed issue 239 + + NEWS | 3 +++ + src/swap.cpp | 2 -- + 2 files changed, 3 insertions(+), 2 deletions(-) + +commit 317435e2835b41d98a885883631d024422f5c9ff +Author: Pieter Hintjens +Date: Thu Aug 11 16:54:50 2011 +0200 + + usleep is void on Android + + src/zmq.cpp | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 7239640d0282902af047d391b4a41fb5cc914bd1 +Author: wroberts +Date: Wed Aug 10 13:23:37 2011 -0400 + + Added an ndk-build clean command to clean script and fixed usleep error. + + - Fixed incorrect directory removal in clean script + + builds/android/clean.sh | 2 +- + src/zmq.cpp | 3 ++- + 2 files changed, 3 insertions(+), 2 deletions(-) + +commit eeca373616e347e947ff73f1cf8c11f7b53fc1a8 +Author: Pieter Hintjens +Date: Wed Aug 10 18:18:15 2011 +0200 + + Updated NEWS for Android + + NEWS | 11 ++++++++--- + 1 files changed, 8 insertions(+), 3 deletions(-) + +commit 880e5c324031bc390bc88d07f5137ce31d1c8c69 +Author: Pieter Hintjens +Date: Wed Aug 10 17:58:16 2011 +0200 + + Fixed use of ANDROID macro + + src/thread.cpp | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 98b96e7d8fd60605ad1498cd540b07dd7040f168 +Author: Pieter Hintjens +Date: Wed Aug 10 17:51:34 2011 +0200 + + Whitespace and comment changes + + builds/android/build.sh | 35 ++++++++++++++++++++++------------- + builds/android/clean.sh | 15 ++++++++++----- + 2 files changed, 32 insertions(+), 18 deletions(-) + +commit f2b76414f70d462e7863e4d79f61227d7315cf9d +Author: Pieter Hintjens +Date: Wed Aug 10 17:13:40 2011 +0200 + + Added William Roberts to AUTHORS + + AUTHORS | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 7f2a522a85a2379120ad6d809be56b9f34e3b89b +Author: wroberts +Date: Tue Aug 9 19:24:11 2011 -0400 + + Finished with clean android build + + builds/android/Android.mk | 6 ++---- + builds/android/build.sh | 5 +++++ + builds/android/clean.sh | 14 +++++++++++--- + 3 files changed, 18 insertions(+), 7 deletions(-) + +commit 62a8d76aa32cc9579811f32d06cbc6ae0a00dbb2 +Author: wroberts +Date: Tue Aug 9 18:47:59 2011 -0400 + + Android wip + + builds/android/Android.mk | 42 ++ + builds/android/Application.mk | 1 + + builds/android/build.sh | 38 ++ + builds/android/clean.sh | 13 + + builds/android/include/platform.hpp | 1 + + builds/android/include/platform_android.hpp | 229 +++++++++ + builds/android/uuid/clear.c | 43 ++ + builds/android/uuid/compare.c | 55 +++ + builds/android/uuid/copy.c | 45 ++ + builds/android/uuid/gen_uuid.c | 680 +++++++++++++++++++++++++++ + builds/android/uuid/gen_uuid_nt.c | 92 ++++ + builds/android/uuid/isnull.c | 48 ++ + builds/android/uuid/pack.c | 69 +++ + builds/android/uuid/parse.c | 79 +++ + builds/android/uuid/unpack.c | 63 +++ + builds/android/uuid/unparse.c | 76 +++ + builds/android/uuid/uuid.h | 103 ++++ + builds/android/uuid/uuidP.h | 59 +++ + builds/android/uuid/uuid_time.c | 171 +++++++ + builds/android/uuid/uuidd.h | 54 +++ + 20 files changed, 1961 insertions(+), 0 deletions(-) + +commit ad6bf4aa3e77d8aec72951ac88e0e916c6e63a0d +Author: Pieter Hintjens +Date: Tue Aug 9 20:48:04 2011 +0200 + + Provisional Android support, from Ghislain Putois + + AUTHORS | 1 + + builds/android/Makefile | 10 ++++++++++ + src/ip.cpp | 20 ++++++++++---------- + src/swap.cpp | 6 +++--- + src/thread.cpp | 10 ++++++---- + 5 files changed, 30 insertions(+), 17 deletions(-) + +commit 9b2c16cb42fd559cfac1c86f420392a2e4cb7b2e +Author: Pieter Hintjens +Date: Sat Jul 30 17:26:42 2011 +0200 + + Fixed issue 236 + + NEWS | 11 +++++++++++ + src/socket_base.cpp | 4 ++++ + 2 files changed, 15 insertions(+), 0 deletions(-) + +commit b7d1b669ce9c3f27202b8daf46425766a877de3e +Author: Pieter Hintjens +Date: Thu Jul 28 14:07:25 2011 +0200 + + Debian packaging wasn't distributed + + NEWS | 6 ------ + 1 files changed, 0 insertions(+), 6 deletions(-) + +commit 764c4f5a8fa2f21d0f755811ba8b4c38c24e7ae5 +Author: Pieter Hintjens +Date: Thu Jul 28 13:52:55 2011 +0200 + + Updated version number for next release + + include/zmq.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 3c913026c72dd83e2d6ffbb6d9866a748502ffcf +Author: Pieter Hintjens +Date: Thu Jul 28 13:44:40 2011 +0200 + + Updated NEWS for 2.1.8 release + + NEWS | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 9d9fb596ab0eaa00da36f79b442d40fd42dfe4eb +Merge: 3cb929e 59a84ab +Author: Pieter Hintjens +Date: Fri Jul 22 11:38:32 2011 +0200 + + Merge branch 'master' of github.com:zeromq/zeromq2-1 + +commit 3cb929e46affd5ebf8c456acba594bae5c106cc8 +Author: Martin Sustrik +Date: Thu Jul 21 23:35:26 2011 +0200 + + mailbox::recv correctly passes EINTR to the caller + + This bug caused signal during blocking call to assert. + + Signed-off-by: Martin Sustrik + + NEWS | 3 +++ + src/mailbox.cpp | 2 +- + 2 files changed, 4 insertions(+), 1 deletions(-) + +commit 59a84abbfbb3be79d8f765da95de23ebdac16630 +Merge: 5227717 1b9bc37 +Author: Pieter Hintjens +Date: Wed Jul 20 16:40:12 2011 +0200 + + Merge branch 'master' of github.com:zeromq/zeromq2-1 + +commit 1b9bc37ff76826069de846fe0c3220b78b357e72 +Author: Pieter Hintjens +Date: Wed Jul 20 13:12:18 2011 +0200 + + Fixed build for MSVC + + builds/msvc/libzmq/libzmq.vcproj | 4 ++++ + src/signaler.cpp | 2 +- + 2 files changed, 5 insertions(+), 1 deletions(-) + +commit d897a2b45b422ff87da6007b06c6147e535491dd +Author: Pieter Hintjens +Date: Tue Jul 19 23:08:02 2011 +0200 + + Fixed build for Windows (signaler.cpp) + + src/signaler.cpp | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 8dd8c71dab33bfd903e05d238b2e8ec507c23c7e +Author: Martin Sustrik +Date: Mon Jul 18 14:29:20 2011 +0200 + + Fixed email addresses in the MAITAINERS file + + Signed-off-by: Martin Sustrik + + MAINTAINERS | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit b69aee1b5e5aee9bdcab75aa1b5af88bfc7b0339 +Author: Pieter Hintjens +Date: Mon Jul 18 13:39:51 2011 +0200 + + Avoid SIGPIPE errors on FreeBSD + + MAINTAINERS | 8 ++++---- + src/tcp_socket.cpp | 2 +- + 2 files changed, 5 insertions(+), 5 deletions(-) + +commit 846769d809dea727bb6aeb58155aeb9afb357bce +Author: Martin Sustrik +Date: Mon Jul 18 09:41:26 2011 +0200 + + Signaler timeout bug on Windows fixed + + Signed-off-by: Martin Sustrik + + src/signaler.cpp | 12 ++++++++---- + 1 files changed, 8 insertions(+), 4 deletions(-) + +commit b613c297897cfca15024d493e181f4f1973b1abe +Author: Pieter Hintjens +Date: Mon Jul 18 11:53:58 2011 +0200 + + Avoid SIGPIPE errors on FreeBSD + + src/tcp_socket.cpp | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 5227717f9b8ccb8cf89967f470e017884edbd10f +Author: Pieter Hintjens +Date: Fri Jul 15 13:43:20 2011 +0200 + + ROUTER can talk to ZMQ_REP, DEALER to ZMQ_REQ + + doc/zmq_socket.txt | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit e496d49f57d6b3a377c11b6d5a58f175200ddbde +Author: Pieter Hintjens +Date: Fri Jul 15 07:08:00 2011 +0200 + + Updated NEWS for issue 230 + + NEWS | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit 5fd65d8f62e4c6e70b23a3e8f0195526b03a2e4f +Merge: a8c9eed 61233d0 +Author: Pieter Hintjens +Date: Fri Jul 15 07:06:42 2011 +0200 + + Merge branch 'issue230' + +commit a8c9eedc031ef68d01b5515ff1108bb7f5ada3ac +Merge: d17cae2 2c89920 +Author: Pieter Hintjens +Date: Thu Jul 14 23:29:15 2011 +0200 + + Merge branch 'master' of github.com:zeromq/zeromq2-1 + +commit d17cae20c5365fe2695b5e9027d8b91916eb9174 +Author: Pieter Hintjens +Date: Thu Jul 14 22:32:45 2011 +0200 + + Backported fix for issue 231 + + NEWS | 4 + + src/Makefile.am | 2 + + src/config.hpp | 7 + + src/ctx.cpp | 2 +- + src/io_thread.cpp | 2 +- + src/mailbox.cpp | 366 ++++------------------------------------ + src/mailbox.hpp | 26 ++- + src/reaper.cpp | 2 +- + src/signaler.cpp | 340 +++++++++++++++++++++++++++++++++++++ + src/signaler.hpp | 63 +++++++ + src/socket_base.cpp | 75 ++++++--- + src/socket_base.hpp | 6 +- + tests/test_shutdown_stress.cpp | 2 +- + 13 files changed, 529 insertions(+), 368 deletions(-) + +commit 2c899206691f528aa21ed52a4eb52ea7d59436cd +Author: Pieter Hintjens +Date: Thu Jul 14 22:32:45 2011 +0200 + + Backported fix for issue 231 + + src/Makefile.am | 2 + + src/config.hpp | 7 + + src/ctx.cpp | 2 +- + src/io_thread.cpp | 2 +- + src/mailbox.cpp | 366 ++++------------------------------------ + src/mailbox.hpp | 26 ++- + src/reaper.cpp | 2 +- + src/signaler.cpp | 340 +++++++++++++++++++++++++++++++++++++ + src/signaler.hpp | 63 +++++++ + src/socket_base.cpp | 75 ++++++--- + src/socket_base.hpp | 6 +- + tests/test_shutdown_stress.cpp | 2 +- + 12 files changed, 525 insertions(+), 368 deletions(-) + +commit 61233d00877dfb0322bb1a1fd3d7916a1e779d9b +Author: Pieter Hintjens +Date: Thu Jul 14 22:09:45 2011 +0200 + + Fixed issue 230 + + src/tcp_socket.cpp | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +commit a5972520e9961eaf6f6948036c99dbfd03812c1e +Author: Pieter Hintjens +Date: Wed Jul 13 18:10:54 2011 +0200 + + Fixed issue 228, backported from 3.0 + + NEWS | 2 ++ + src/rep.cpp | 2 +- + src/xrep.cpp | 4 ---- + 3 files changed, 3 insertions(+), 5 deletions(-) + +commit 647dca9650d54637a0e763216825875d1ac915d1 +Author: Martin Sustrik +Date: Mon Jul 11 16:05:04 2011 +0200 + + zmq_bind(3) and zmq_connect(3) describe EINVAL error + + Signed-off-by: Martin Sustrik + + doc/zmq_bind.txt | 2 ++ + doc/zmq_connect.txt | 2 ++ + 2 files changed, 4 insertions(+), 0 deletions(-) + +commit 89fc94cc7e3bb7f23c27dcc57877ec582f4af790 +Author: Pieter Hintjens +Date: Tue Jul 12 15:47:01 2011 +0200 + + Updated NEWS + + NEWS | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 994dbe48e74ddfa30a66c46430e878e60dfdd61e +Author: Pieter Hintjens +Date: Tue Jul 12 15:45:38 2011 +0200 + + Removed debian packaging, it's now at http://packages.debian.org/source/sid/zeromq + + debian/README.Debian | 4 -- + debian/changelog | 24 ---------- + debian/compat | 1 - + debian/control | 76 -------------------------------- + debian/copyright | 105 -------------------------------------------- + debian/libzmq-dev.install | 5 -- + debian/libzmq-dev.manpages | 2 - + debian/libzmq0.install | 1 - + debian/libzmq0.manpages | 5 -- + debian/rules | 92 -------------------------------------- + debian/source/format | 1 - + debian/source/options | 1 - + debian/zeromq-bin.install | 3 - + debian/zeromq-bin.manpages | 3 - + 14 files changed, 0 insertions(+), 323 deletions(-) + +commit d27374c8346cdde9b0e77fb625249df6d185c6e0 +Author: Martin Sustrik +Date: Mon Jul 4 09:27:50 2011 +0200 + + License text in autogen.sh fixed + + autogen.sh incorrectly referred to the license as GPL. + Changed to LGPL. + + Signed-off-by: Martin Sustrik + + autogen.sh | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +commit c35a14beaba8d60e473f15d9978b075d33423a55 +Author: Martin Sustrik +Date: Thu Jun 30 00:05:03 2011 +0200 + + Testing for errors from pthread_* functions fixed + + pthread_* functions return the error number rather than + setting errno. This was not accounter for till now. + + Signed-off-by: Martin Sustrik + + src/thread.cpp | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit 257859d1175d361eb9064dc94d8ad80bed6eec58 +Author: Martin Sustrik +Date: Tue Jun 28 10:22:27 2011 +0200 + + Packaging for MSVC build fixed + + MSVC project files for inproc_lat and inproc_thr were not + packaged during make dist phase. + + Signed-off-by: Martin Sustrik + + builds/msvc/Makefile.am | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +commit a26c5bfe99dcc574e4899cc7472bffbc092511f5 +Author: Carl Clemens +Date: Sun Jun 26 16:19:45 2011 +0200 + + Typo in zmq_msg_size(3) fixed + + Signed-off-by: Carl Clemens + + AUTHORS | 1 + + doc/zmq_msg_size.txt | 2 +- + 2 files changed, 2 insertions(+), 1 deletions(-) + +commit fa6b54fccc281ed5f7d2d7b4f60c8f5f3f019167 +Merge: 21ea666 2008917 +Author: Pieter Hintjens +Date: Sun Jun 19 10:31:58 2011 +0200 + + Merge branch 'master' of github.com:zeromq/zeromq2-1 + +commit 21ea66635f5bc202ca64299d9f70687d224d55fc +Author: Steven McCoy +Date: Fri Jun 17 15:02:48 2011 -0400 + + Refactor Windows versioning and WinSock usage. + + Signed-off-by: Steven McCoy + + include/zmq.h | 2 +- + src/ctx.cpp | 12 +++-- + src/select.cpp | 9 ++-- + src/windows.hpp | 152 +++++++++++++++++++++++++++++++++++++++++++++---------- + 4 files changed, 138 insertions(+), 37 deletions(-) + +commit 20089170eabc1614d4b3e946ae9a363cfa8d3e47 +Author: Martin Sustrik +Date: Tue Jun 14 09:58:18 2011 +0200 + + Fixed issue 223 - ENETUNREACH is a valid error from connect + + This patch fixed the JIRA issue 223 + + Signed-off-by: Martin Sustrik + + NEWS | 4 ++++ + src/tcp_connecter.cpp | 3 ++- + 2 files changed, 6 insertions(+), 1 deletions(-) + +commit 0a533915b4cb2d3910ee3f128e882376e340f87b +Author: Pieter Hintjens +Date: Mon Jun 13 11:45:06 2011 +0200 + + Revert "Fix scope on Windows includes." + + This reverts commit c55e8b47b63ba69b7e240edd8270629f99a00b0d. + + src/ctx.cpp | 8 ++------ + src/select.cpp | 2 +- + src/select.hpp | 2 +- + src/windows.hpp | 5 +++-- + 4 files changed, 7 insertions(+), 10 deletions(-) + +commit c55e8b47b63ba69b7e240edd8270629f99a00b0d +Author: Steven McCoy +Date: Sun Jun 12 19:37:11 2011 +0200 + + Fix scope on Windows includes. + + Fix windows.h included before winsock2.h. + Remove definition of _WINSOCKAPI_. + + Signed-off-by: Steven McCoy + + src/ctx.cpp | 8 ++++++-- + src/select.cpp | 2 +- + src/select.hpp | 2 +- + src/windows.hpp | 5 ++--- + 4 files changed, 10 insertions(+), 7 deletions(-) + +commit 69bce48516554cb1f2ac5e52ebb59632ae967c48 +Author: Pieter Hintjens +Date: Thu Jun 9 19:55:21 2011 +0200 + + Fixed NEWS for broken 2.1.6 release + + NEWS | 42 ++++++++++++++++++++---------------------- + 1 files changed, 20 insertions(+), 22 deletions(-) + +commit 71012227f8615b398f755a82f73a70c61ba4fc55 +Merge: 143b64b 47245e1 +Author: Pieter Hintjens +Date: Thu May 26 11:07:51 2011 -0700 + + Merge branch 'master' of github.com:zeromq/zeromq2-1 + +commit 2f6bc9ce9260a3234a1f1de5c63956b081695f40 +Merge: 6a8b691 47245e1 +Author: Pieter Hintjens +Date: Mon May 23 12:53:30 2011 +0200 + + Merge branch 'master' of github.com:zeromq/zeromq2-1 + +commit 47245e189c81aa083824d732c238d64d5ea32fce +Merge: dae5a6c f94a700 +Author: Pieter Hintjens +Date: Mon May 23 03:47:04 2011 -0700 + + Merge pull request #19 from grk/patch-1 + + Fix overflow of megabits on 32bit machines. + +commit 6a8b691a3117e8d925ee29392c6463568f37108c +Author: Pieter Hintjens +Date: Fri May 20 17:22:42 2011 +0200 + + Prepared for 2.1.8 + + NEWS | 10 ++++++++++ + include/zmq.h | 2 +- + 2 files changed, 11 insertions(+), 1 deletions(-) + +commit f94a700626d2d7fc48fce2f0400c764416483e88 +Author: Grzesiek Kolodziejczyk +Date: Thu May 12 03:46:08 2011 -0700 + + Fix overflow of megabits on 32bit machines. + + perf/local_thr.cpp | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + commit c35f65a82f1dace3a0b9afc5185dc3efc35595b5 Author: Pieter Hintjens Date: Thu May 12 12:07:51 2011 +0200 @@ -9,6 +653,13 @@ Date: Thu May 12 12:07:51 2011 +0200 NEWS | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) +commit 143b64bf5ccd59227135cf151a4dc3ed60384360 +Merge: 6bb9e7b dae5a6c +Author: Pieter Hintjens +Date: Tue May 10 08:05:23 2011 +0200 + + Merge branch 'master' of github.com:zeromq/zeromq2-1 + commit dae5a6cb9e589e2471558dc86c55202558e918c2 Author: Martin Sustrik Date: Sun May 8 09:03:49 2011 +0200 @@ -34,6 +685,18 @@ Date: Sat Apr 9 09:46:59 2011 +0200 include/zmq.h | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) +commit 6bb9e7b55db32090763c7f4a43bda8be24f29fd3 +Author: Pieter Hintjens +Date: Sat May 7 09:03:38 2011 +0200 + + Fixed spelling errors in man pages + + doc/zmq_getsockopt.txt | 2 +- + doc/zmq_pgm.txt | 4 ++-- + doc/zmq_setsockopt.txt | 2 +- + doc/zmq_tcp.txt | 2 +- + 4 files changed, 5 insertions(+), 5 deletions(-) + commit 52318cf705f9b0a73e88b8296d10291f7ba22a86 Merge: c42d156 141a001 Author: Pieter Hintjens diff --git a/MAINTAINERS b/MAINTAINERS index 539c807..00f5030 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1,6 +1,6 @@ Component: Atomic Operations -Maintainer: Martin Lucina -Contact: mato@kotelna.sk +Maintainer: Martin Sustrik +Contact: sustrik@250bpm.com Component: Lock-free Algorithms Maintainer: Martin Sustrik @@ -38,13 +38,13 @@ Component: Generic Infrastructure (context, mailbox, command, pipe) Maintainer: Martin Sustrik Contact: sustrik@250bpm.com -Component: Reference manual -Maintainer: Martin Lucina -Contact: mato@kotelna.sk +Component: Documentation +Maintainer: Martin Sustrik +Contact: sustrik@250bpm.com Component: Autotools build system -Maintainer: Mikko Koppanen, Martin Lucina -Contact: mato@kotelna.sk +Maintainer: Mikko Koppanen +Contact: mikko.koppanen@gmail.com Component: MSVC build system Maintainer: Martin Sustrik diff --git a/NEWS b/NEWS index 8fc0892..9f7a789 100644 --- a/NEWS +++ b/NEWS @@ -1,46 +1,78 @@ -0MQ version 2.1.7 (Stable), released on 2011/05/12 +0MQ version 2.1.9 (Stable), released on 2011/08/29 ================================================== Bug fixes --------- -* Fixed issue 191, message atomicity issue with PUB sockets (an old issue). +* Fixed issue 240, assertion failure in pgm_socket.cpp:437. -* Fixed issue 199 (affected ROUTER/XREP sockets, an old issue). +* Fixed issue 238, assertion failure in zmq.cpp:655, when zmq_poll is + used on an empty set, on Windows. -* Fixed issue 206, assertion failure in zmq.cpp:223, affected all sockets - (bug was introduced in 2.1.6 as part of message validity checking). +* Fixed issue 239, assertion failure in zmq.cpp:223, when ZMQ_SWAP was + used with explicit identities and multiple SUB sockets. -* Fixed issue 211, REP socket asserted if sent malformed envelope (old issue - due to abuse of assertions for error checking). +* Fixed issue 236, zmq_send() and zmq_recv() did not always return + error conditions such as EFSM properly. This bug was introduced in + version 2.1.8 by the backport of changes for issue 231. -* Fixed issue 212, reconnect failing after resume from sleep on Windows - (due to not handling WSAENETDOWN). +Building +-------- -* Properly handle WSAENETUNREACH on Windows (e.g. if client connects - before server binds). +* 0MQ support for Android added (Bill Roberts, Mikko Koppanen). -Changes -------- -* Runtime checking of socket and context validity, to catch e.g. using a - socket after closing it, or passing an invalid pointer to context/socket - methods. +0MQ version 2.1.8 (RC), released on 2011/07/28 +============================================== -* Test cases moved off port 5555, which conflicts with other services. +Bug fixes +--------- -* Clarified zmq_poll man page that the resolution of the timeout is 1msec. +* Fixed issue 223, assertion failure in tcp_connecter.cpp:300 when + connecting to a server that is on an unreachable network (errno is + equal to ENETUNREACH). + +* Fixed issue 228, assertion failure at rep.cpp:88 when HWM was reached. +* Fixed issue 231, assertion failure at mailbox.cpp:183 when too many + pending socketpair operations were queued (major backport from 3.0). -0MQ version 2.1.6 (Stable), released on 2011/04/26 +* Fixed issue 234, assertion failure at mailbox.cpp:77 when Ctrl-C was + used (only affected git master following backport for 231). + +* Fixed issue 230, SIGPIPE killing servers when client disconnected, hit + OS/X only. + +Note: this release was renamed "release candidate" due to issue 236, +fixed in 2.1.9. + + +0MQ version 2.1.7 (Stable), released on 2011/05/12 ================================================== Bug fixes --------- -* Fixed memory leak with threads on Windows. +* Fixed issue 188, assert when closing socket that had unread multipart + data still on it (affected PULL, SUB, ROUTER, and DEALER sockets). -* Assert during SUB socket termination fixed. +* Fixed issue 191, message atomicity issue with PUB sockets (an old issue). + +* Fixed issue 199 (affected ROUTER/XREP sockets, an old issue). + +* Fixed issue 206, assertion failure in zmq.cpp:223, affected all sockets + (bug was introduced in 2.1.6 as part of message validity checking). + +* Fixed issue 211, REP socket asserted if sent malformed envelope (old issue + due to abuse of assertions for error checking). + +* Fixed issue 212, reconnect failing after resume from sleep on Windows + (due to not handling WSAENETDOWN). + +* Properly handle WSAENETUNREACH on Windows (e.g. if client connects + before server binds). + +* Fixed memory leak with threads on Windows. Changes ------- @@ -56,6 +88,21 @@ Changes * Added "--with-system-pgm" configure option to use already installed OpenPGM. +* Runtime checking of socket and context validity, to catch e.g. using a + socket after closing it, or passing an invalid pointer to context/socket + methods. + +* Test cases moved off port 5555, which conflicts with other services. + +* Clarified zmq_poll man page that the resolution of the timeout is 1msec. + + +0MQ version 2.1.6 (Broken), released on 2011/04/26 +================================================== + +Note that this version contained a malformed patch and is not usable. +It is not available for download, but is available in the git via the +2.1.6 tag. 0MQ version 2.1.5 (Broken), released on 2011/04/20 ================================================== diff --git a/aclocal.m4 b/aclocal.m4 index bd741d2..f9e8889 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -156,7 +156,7 @@ $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. -_PKG_TEXT])dnl +_PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) @@ -167,7 +167,7 @@ path to pkg-config. _PKG_TEXT -To get pkg-config, see .])dnl +To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS diff --git a/autogen.sh b/autogen.sh index 2cc40b9..d03084b 100755 --- a/autogen.sh +++ b/autogen.sh @@ -5,17 +5,17 @@ # # This file is part of 0MQ. # -# 0MQ is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by +# 0MQ is free software; you can redistribute it and/or modify it under +# the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # 0MQ is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# GNU Lesser General Public License for more details. # -# You should have received a copy of the GNU General Public License +# You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . # Script to generate all required files from fresh git checkout. diff --git a/builds/msvc/Makefile.am b/builds/msvc/Makefile.am index 9ce00aa..0b0af6f 100644 --- a/builds/msvc/Makefile.am +++ b/builds/msvc/Makefile.am @@ -3,6 +3,8 @@ LIBZMQ_DIST = libzmq/libzmq.vcproj platform.hpp msvc.sln PERF_DIST = c_local_thr/c_local_thr.vcproj \ c_remote_thr/c_remote_thr.vcproj \ c_local_lat/c_local_lat.vcproj \ - c_remote_lat/c_remote_lat.vcproj + c_remote_lat/c_remote_lat.vcproj \ + inproc_lat/inproc_lat.vcproj \ + inproc_thr/inproc_thr.vcproj EXTRA_DIST = $(LIBZMQ_DIST) $(PERF_DIST) diff --git a/builds/msvc/Makefile.in b/builds/msvc/Makefile.in index 20d9e1d..6283062 100644 --- a/builds/msvc/Makefile.in +++ b/builds/msvc/Makefile.in @@ -197,7 +197,9 @@ LIBZMQ_DIST = libzmq/libzmq.vcproj platform.hpp msvc.sln PERF_DIST = c_local_thr/c_local_thr.vcproj \ c_remote_thr/c_remote_thr.vcproj \ c_local_lat/c_local_lat.vcproj \ - c_remote_lat/c_remote_lat.vcproj + c_remote_lat/c_remote_lat.vcproj \ + inproc_lat/inproc_lat.vcproj \ + inproc_thr/inproc_thr.vcproj EXTRA_DIST = $(LIBZMQ_DIST) $(PERF_DIST) all: all-am diff --git a/builds/msvc/inproc_lat/inproc_lat.vcproj b/builds/msvc/inproc_lat/inproc_lat.vcproj new file mode 100644 index 0000000..15549ff --- /dev/null +++ b/builds/msvc/inproc_lat/inproc_lat.vcproj @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/builds/msvc/inproc_thr/inproc_thr.vcproj b/builds/msvc/inproc_thr/inproc_thr.vcproj new file mode 100644 index 0000000..96415c9 --- /dev/null +++ b/builds/msvc/inproc_thr/inproc_thr.vcproj @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/builds/msvc/libzmq/libzmq.vcproj b/builds/msvc/libzmq/libzmq.vcproj index c774ac2..370223d 100644 --- a/builds/msvc/libzmq/libzmq.vcproj +++ b/builds/msvc/libzmq/libzmq.vcproj @@ -394,6 +394,10 @@ RelativePath="..\..\..\src\session.cpp" > + + diff --git a/config/ltmain.sh b/config/ltmain.sh index 7ed280b..fa4b1e1 100755 --- a/config/ltmain.sh +++ b/config/ltmain.sh @@ -65,7 +65,7 @@ # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) -# $progname: (GNU libtool) 2.2.6b Debian-2.2.6b-2ubuntu1 +# $progname: (GNU libtool) 2.2.6b Debian-2.2.6b-2ubuntu3 # automake: $automake_version # autoconf: $autoconf_version # @@ -73,7 +73,7 @@ PROGRAM=ltmain.sh PACKAGE=libtool -VERSION="2.2.6b Debian-2.2.6b-2ubuntu1" +VERSION="2.2.6b Debian-2.2.6b-2ubuntu3" TIMESTAMP="" package_revision=1.3017 diff --git a/configure b/configure index 1344c83..edd17fa 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.67 for zeromq 2.1.7. +# Generated by GNU Autoconf 2.67 for zeromq 2.1.9. # # Report bugs to . # @@ -701,8 +701,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='zeromq' PACKAGE_TARNAME='zeromq' -PACKAGE_VERSION='2.1.7' -PACKAGE_STRING='zeromq 2.1.7' +PACKAGE_VERSION='2.1.9' +PACKAGE_STRING='zeromq 2.1.9' PACKAGE_BUGREPORT='zeromq-dev@lists.zeromq.org' PACKAGE_URL='' @@ -1467,7 +1467,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures zeromq 2.1.7 to adapt to many kinds of systems. +\`configure' configures zeromq 2.1.9 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1537,7 +1537,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of zeromq 2.1.7:";; + short | recursive ) echo "Configuration of zeromq 2.1.9:";; esac cat <<\_ACEOF @@ -1659,7 +1659,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -zeromq configure 2.1.7 +zeromq configure 2.1.9 generated by GNU Autoconf 2.67 Copyright (C) 2010 Free Software Foundation, Inc. @@ -2414,7 +2414,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by zeromq $as_me 2.1.7, which was +It was created by zeromq $as_me 2.1.9, which was generated by GNU Autoconf 2.67. Invocation command line was $ $0 $@ @@ -3233,7 +3233,7 @@ fi # Define the identity of the package. PACKAGE='zeromq' - VERSION='2.1.7' + VERSION='2.1.9' cat >>confdefs.h <<_ACEOF @@ -16207,6 +16207,14 @@ else as_fn_error $? "cannot link with -luuid, install uuid-dev." "$LINENO" 5 fi + + case "${host_os}" in + *android*) + +$as_echo "#define ZMQ_HAVE_ANDROID 1" >>confdefs.h + + ;; + esac ;; *solaris*) # Define on Solaris to enable all library features @@ -19405,7 +19413,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by zeromq $as_me 2.1.7, which was +This file was extended by zeromq $as_me 2.1.9, which was generated by GNU Autoconf 2.67. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -19471,7 +19479,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -zeromq config.status 2.1.7 +zeromq config.status 2.1.9 configured by $0, generated by GNU Autoconf 2.67, with options \\"\$ac_cs_config\\" diff --git a/configure.in b/configure.in index 25d3c93..0f9b358 100644 --- a/configure.in +++ b/configure.in @@ -91,6 +91,12 @@ case "${host_os}" in AC_CHECK_LIB(rt, sem_init) AC_CHECK_LIB(uuid, uuid_generate, , [AC_MSG_ERROR([cannot link with -luuid, install uuid-dev.])]) + + case "${host_os}" in + *android*) + AC_DEFINE(ZMQ_HAVE_ANDROID, 1, [Have Android OS]) + ;; + esac ;; *solaris*) # Define on Solaris to enable all library features diff --git a/doc/zmq.7 b/doc/zmq.7 index 60394d0..07ec236 100644 --- a/doc/zmq.7 +++ b/doc/zmq.7 @@ -2,12 +2,12 @@ .\" Title: zmq .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.75.2 -.\" Date: 05/06/2011 +.\" Date: 08/29/2011 .\" Manual: 0MQ Manual -.\" Source: 0MQ 2.1.6 +.\" Source: 0MQ 2.1.9 .\" Language: English .\" -.TH "ZMQ" "7" "05/06/2011" "0MQ 2\&.1\&.6" "0MQ Manual" +.TH "ZMQ" "7" "08/29/2011" "0MQ 2\&.1\&.9" "0MQ Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/doc/zmq.html b/doc/zmq.html index b35c57e..bce168f 100644 --- a/doc/zmq.html +++ b/doc/zmq.html @@ -2,15 +2,28 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - - + + zmq(7) - +
+

SYNOPSIS

#include <zmq.h>

cc [flags] files -lzmq [libraries]

+
+

DESCRIPTION

The ØMQ lightweight messaging kernel is a library which extends the standard @@ -596,7 +579,8 @@ and more.

This documentation presents an overview of ØMQ concepts, describes how ØMQ abstracts standard sockets and provides a reference manual for the functions provided by the ØMQ library.

-

Context

+
+

Context

Before using any ØMQ library functions the caller must initialise a ØMQ context using zmq_init(). The following functions are provided to handle initialisation and termination of a context:

@@ -618,6 +602,7 @@ Terminate ØMQ context

+

Thread safety

A ØMQ context is thread safe and may be shared among as many application threads as necessary, without any additional locking required on the part of @@ -628,12 +613,17 @@ In practice this means applications can create a socket in one thread with zmq_socket() and then pass it to a newly created thread as part of thread initialization, for example via a structure passed as an argument to pthread_create().

+
+

Multiple contexts

Multiple contexts may coexist within a single application. Thus, an application can use ØMQ directly and at the same time make use of any number of additional libraries or components which themselves make use of ØMQ as long as the above guidelines regarding thread safety are adhered to.

-

Messages

+
+
+
+

Messages

A ØMQ message is a discrete unit of data passed between applications or components of the same application. ØMQ messages have no internal structure and from the point of view of ØMQ itself they are considered to be opaque binary @@ -677,7 +667,9 @@ Message manipulation

-

Sockets

+
+
+

Sockets

ØMQ sockets present an abstraction of a asynchronous message queue, with the exact queueing semantics depending on the socket type in use. See zmq_socket(3) for the socket types provided.

@@ -731,7 +723,9 @@ Sending and receiving messages a set containing both ØMQ sockets and standard sockets. This mechanism mirrors the standard poll() system call, and is described in detail in zmq_poll(3).

-

Transports

+
+
+

Transports

A ØMQ socket can use multiple different underlying transport mechanisms. Each transport mechanism is suited to a particular purpose and has its own advantages and drawbacks.

@@ -770,13 +764,18 @@ Local in-process (inter-thread) communication transport

-

Devices

+
+
+

Devices

ØMQ provides devices, which are building blocks that act as intermediate nodes in complex messaging topologies. Devices can act as brokers that other nodes connect to, proxies that connect through to other nodes, or any mix of these two models.

You can start a device in an application thread, see zmq_device(3).

+ + +

ERROR HANDLING

The ØMQ library functions handle errors using the standard conventions found on @@ -790,6 +789,8 @@ to assist in these cases; for details refer to zmq_errn

+
+

MISCELLANEOUS

The following miscellaneous functions are provided:

@@ -804,6 +805,8 @@ Report ØMQ library version
+
+

LANGUAGE BINDINGS

The ØMQ library provides interfaces suitable for calling from programs in any @@ -811,23 +814,33 @@ language; this documentation documents those interfaces as they would be used by C programmers. The intent is that programmers using ØMQ from other languages shall refer to this documentation alongside any documentation provided by the vendor of their language binding.

-

C++ language binding

+
+

C++ language binding

The ØMQ distribution includes a C++ language binding, which is documented separately in zmq_cpp(7).

-

Other language bindings

+
+
+

Other language bindings

Other language bindings (Python, Ruby, Java and more) are provided by members of the ØMQ community and pointers can be found on the ØMQ website.

+
+
+

AUTHORS

This ØMQ manual page was written by Martin Sustrik <sustrik@250bpm.com> and Martin Lucina <mato@kotelna.sk>.

+
+

RESOURCES

Main web site: http://www.zeromq.org/

Report bugs to the ØMQ development mailing list: <zeromq-dev@lists.zeromq.org>

+
+

COPYING

Free use of this software is granted under the terms of the GNU Lesser General @@ -835,11 +848,12 @@ Public License (LGPL). For details see the files COPYING and COPYIN included with the ØMQ distribution.

+

diff --git a/doc/zmq_bind.3 b/doc/zmq_bind.3 index ce589e9..997f7a0 100644 --- a/doc/zmq_bind.3 +++ b/doc/zmq_bind.3 @@ -2,12 +2,12 @@ .\" Title: zmq_bind .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.75.2 -.\" Date: 05/07/2011 +.\" Date: 08/29/2011 .\" Manual: 0MQ Manual -.\" Source: 0MQ 2.1.6 +.\" Source: 0MQ 2.1.9 .\" Language: English .\" -.TH "ZMQ_BIND" "3" "05/07/2011" "0MQ 2\&.1\&.6" "0MQ Manual" +.TH "ZMQ_BIND" "3" "08/29/2011" "0MQ 2\&.1\&.9" "0MQ Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -70,6 +70,11 @@ With the exception of \fIZMQ_PAIR\fR sockets, a single socket may be connected t The \fIzmq_bind()\fR function shall return zero if successful\&. Otherwise it shall return \-1 and set \fIerrno\fR to one of the values defined below\&. .SH "ERRORS" .PP +\fBEINVAL\fR +.RS 4 +The endpoint supplied is invalid\&. +.RE +.PP \fBEPROTONOSUPPORT\fR .RS 4 The requested diff --git a/doc/zmq_bind.html b/doc/zmq_bind.html index 034113d..ef04708 100644 --- a/doc/zmq_bind.html +++ b/doc/zmq_bind.html @@ -2,15 +2,28 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - - + + zmq_bind(3) - +
+

SYNOPSIS

int zmq_bind (void *socket, const char *endpoint);

+
+

DESCRIPTION

The zmq_bind() function shall create an endpoint for accepting connections @@ -633,15 +616,27 @@ incoming connections from multiple endpoints bound to the socket using zmq_bind(). Refer to zmq_socket(3) for a description of the exact semantics involved when connecting or binding a socket to multiple endpoints.

+
+

RETURN VALUE

The zmq_bind() function shall return zero if successful. Otherwise it shall return -1 and set errno to one of the values defined below.

+
+

ERRORS

+EINVAL +
+
+

+The endpoint supplied is invalid. +

+
+
EPROTONOSUPPORT
@@ -707,6 +702,8 @@ No I/O thread is available to accomplish the task.
+
+

EXAMPLE

@@ -723,23 +720,28 @@ rc = zmq_bind (socket, "tcp://eth0:5555"); assert (rc == 0);
+
+ +

AUTHORS

This ØMQ manual page was written by Martin Sustrik <sustrik@250bpm.com> and Martin Lucina <mato@kotelna.sk>.

+

diff --git a/doc/zmq_bind.txt b/doc/zmq_bind.txt index 06fd79c..1d7c2ff 100644 --- a/doc/zmq_bind.txt +++ b/doc/zmq_bind.txt @@ -44,6 +44,8 @@ return `-1` and set 'errno' to one of the values defined below. ERRORS ------ +*EINVAL*:: +The endpoint supplied is invalid. *EPROTONOSUPPORT*:: The requested 'transport' protocol is not supported. *ENOCOMPATPROTO*:: diff --git a/doc/zmq_close.3 b/doc/zmq_close.3 index 86e5666..82a3cc8 100644 --- a/doc/zmq_close.3 +++ b/doc/zmq_close.3 @@ -2,12 +2,12 @@ .\" Title: zmq_close .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.75.2 -.\" Date: 05/07/2011 +.\" Date: 08/29/2011 .\" Manual: 0MQ Manual -.\" Source: 0MQ 2.1.6 +.\" Source: 0MQ 2.1.9 .\" Language: English .\" -.TH "ZMQ_CLOSE" "3" "05/07/2011" "0MQ 2\&.1\&.6" "0MQ Manual" +.TH "ZMQ_CLOSE" "3" "08/29/2011" "0MQ 2\&.1\&.9" "0MQ Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/doc/zmq_close.html b/doc/zmq_close.html index 015030a..bca12dc 100644 --- a/doc/zmq_close.html +++ b/doc/zmq_close.html @@ -2,15 +2,28 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - - + + zmq_close(3) - +
+

SYNOPSIS

int zmq_close (void *socket);

+
+

DESCRIPTION

The zmq_close() function shall destroy the socket referenced by the socket @@ -603,11 +586,15 @@ For details refer to zmq_setsockopt(3) and

+
+

RETURN VALUE

The zmq_close() function shall return zero if successful. Otherwise it shall return -1 and set errno to one of the values defined below.

+
+

ERRORS

@@ -621,6 +608,8 @@ The provided socket was invalid.
+
+

SEE ALSO

zmq_socket(3) @@ -628,17 +617,20 @@ The provided socket was invalid. zmq_setsockopt(3) zmq(7)

+
+

AUTHORS

This ØMQ manual page was written by Martin Sustrik <sustrik@250bpm.com> and Martin Lucina <mato@kotelna.sk>.

+

diff --git a/doc/zmq_connect.3 b/doc/zmq_connect.3 index 1adc6af..4f50086 100644 --- a/doc/zmq_connect.3 +++ b/doc/zmq_connect.3 @@ -2,12 +2,12 @@ .\" Title: zmq_connect .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.75.2 -.\" Date: 05/07/2011 +.\" Date: 08/29/2011 .\" Manual: 0MQ Manual -.\" Source: 0MQ 2.1.6 +.\" Source: 0MQ 2.1.9 .\" Language: English .\" -.TH "ZMQ_CONNECT" "3" "05/07/2011" "0MQ 2\&.1\&.6" "0MQ Manual" +.TH "ZMQ_CONNECT" "3" "08/29/2011" "0MQ 2\&.1\&.9" "0MQ Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -86,6 +86,11 @@ The connection will not be performed immediately but as needed by 0MQ\&. Thus a The \fIzmq_connect()\fR function shall return zero if successful\&. Otherwise it shall return \-1 and set \fIerrno\fR to one of the values defined below\&. .SH "ERRORS" .PP +\fBEINVAL\fR +.RS 4 +The endpoint supplied is invalid\&. +.RE +.PP \fBEPROTONOSUPPORT\fR .RS 4 The requested diff --git a/doc/zmq_connect.html b/doc/zmq_connect.html index b67ced9..52c0ad3 100644 --- a/doc/zmq_connect.html +++ b/doc/zmq_connect.html @@ -2,15 +2,28 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - - + + zmq_connect(3) - +
+

SYNOPSIS

int zmq_connect (void *socket, const char *endpoint);

+
+

DESCRIPTION

The zmq_connect() function shall connect the socket referenced by the @@ -643,15 +626,27 @@ physical connection was or can actually be established.

+
+

RETURN VALUE

The zmq_connect() function shall return zero if successful. Otherwise it shall return -1 and set errno to one of the values defined below.

+
+

ERRORS

+EINVAL +
+
+

+The endpoint supplied is invalid. +

+
+
EPROTONOSUPPORT
@@ -693,6 +688,8 @@ No I/O thread is available to accomplish the task.
+
+

EXAMPLE

@@ -709,23 +706,28 @@ rc = zmq_connect (socket, "tcp://server001:5555"); assert (rc == 0);
+
+ +

AUTHORS

This ØMQ manual page was written by Martin Sustrik <sustrik@250bpm.com> and Martin Lucina <mato@kotelna.sk>.

+

diff --git a/doc/zmq_connect.txt b/doc/zmq_connect.txt index 1c69631..6ec56b0 100644 --- a/doc/zmq_connect.txt +++ b/doc/zmq_connect.txt @@ -48,6 +48,8 @@ shall return `-1` and set 'errno' to one of the values defined below. ERRORS ------ +*EINVAL*:: +The endpoint supplied is invalid. *EPROTONOSUPPORT*:: The requested 'transport' protocol is not supported. *ENOCOMPATPROTO*:: diff --git a/doc/zmq_cpp.7 b/doc/zmq_cpp.7 index 835da89..72c2f97 100644 --- a/doc/zmq_cpp.7 +++ b/doc/zmq_cpp.7 @@ -2,12 +2,12 @@ .\" Title: zmq_cpp .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.75.2 -.\" Date: 05/06/2011 +.\" Date: 08/29/2011 .\" Manual: 0MQ Manual -.\" Source: 0MQ 2.1.6 +.\" Source: 0MQ 2.1.9 .\" Language: English .\" -.TH "ZMQ_CPP" "7" "05/06/2011" "0MQ 2\&.1\&.6" "0MQ Manual" +.TH "ZMQ_CPP" "7" "08/29/2011" "0MQ 2\&.1\&.9" "0MQ Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/doc/zmq_cpp.html b/doc/zmq_cpp.html index 31aea45..6b31c9f 100644 --- a/doc/zmq_cpp.html +++ b/doc/zmq_cpp.html @@ -2,15 +2,28 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - - + + zmq_cpp(7) - +
+

SYNOPSIS

#include <zmq.hpp>

c++ [flags] files -lzmq [libraries]

+
+

DESCRIPTION

This manual page describes how the ØMQ C++ language binding maps to the @@ -592,126 +575,151 @@ underlying ØMQ C library functions.

All ØMQ constants defined by zmq.h are also available to the C++ language binding.

The following classes are provided in the zmq namespace:

-

Context

+
+

Context

The context_t class encapsulates functionality dealing with the initialisation and termination of a ØMQ context.

+

Constructor

-
context_t::context_t(int io_threads)
-
+
context_t::context_t(int io_threads)
+

Maps to the zmq_init() function, as described in zmq_init(3).

+
+

Destructor

-
context_t::~context_t(void)
-
+
context_t::~context_t(void)
+

Maps to the zmq_term() function, as described in zmq_term(3).

+
+

Methods

None.

-

Socket

+
+
+
+

Socket

The socket_t class encapsulates a ØMQ socket.

+

Constructor

-
socket_t::socket_t(context_t &context, int type)
-
+
socket_t::socket_t(context_t &context, int type)
+

Maps to the zmq_socket() function, as described in zmq_socket(3).

+
+

Destructor

-
socket_t::~socket_t(void)
-
+
socket_t::~socket_t(void)
+

Calls the zmq_close() function, as described in zmq_close(3).

+
+

Methods

-
void socket_t::getsockopt(int option_name, void *option_value, size_t -*option_len)
-
+
void socket_t::getsockopt(int option_name, void *option_value, size_t
+*option_len)
+

Maps to the zmq_getsockopt() function, as described in zmq_getsockopt(3).

-
void socket_t::setsockopt(int option_name, const void *option_value, size_t -option_len)
-
+
void socket_t::setsockopt(int option_name, const void *option_value, size_t
+option_len)
+

Maps to the zmq_setsockopt() function, as described in zmq_setsockopt(3).

-
void socket_t::bind(const char *endpoint)
-
+
void socket_t::bind(const char *endpoint)
+

Maps to the zmq_bind() function, as described in zmq_bind(3).

-
void socket_t::connect(const char *endpoint)
-
+
void socket_t::connect(const char *endpoint)
+

Maps to the zmq_connect() function, as described in zmq_connect(3).

-
bool socket_t::send(message_t &msg, int flags = 0)
-
+
bool socket_t::send(message_t &msg, int flags = 0)
+

Maps to the zmq_send() function, as described in zmq_send(3). Returns true if message is successfully sent, false if it is not.

-
bool socket_t::recv(message_t *msg, int flags = 0)
-
+
bool socket_t::recv(message_t *msg, int flags = 0)
+

Maps to the zmq_recv() function, as described in zmq_recv(3). Returns true if message is successfully received, false if it is not.

-

Message

+
+
+
+

Message

The zmq::message_t class encapsulates the zmq_msg_t structure and functions to construct, destruct and manipulate ØMQ messages.

+

Constructor

-
message_t::message_t(void) +
message_t::message_t(void)
 message_t::message_t(size_t size)
-message_t::message_t(void *data, size_t size, free_fn *ffn)
-
+message_t::message_t(void *data, size_t size, free_fn *ffn) +

These map to the zmq_msg_init(), zmq_msg_init_size() and zmq_msg_init_data() functions, described in zmq_msg_init(3), zmq_msg_init_size(3) and zmq_msg_init_data(3) respectively.

+
+

Destructor

-
message_t::~message_t(void)
-
+
message_t::~message_t(void)
+

Calls the zmq_msg_close() function, as described in zmq_msg_close(3).

+
+

Methods

-
void *message_t::data (void)
-
+
void *message_t::data (void)
+

Maps to the zmq_msg_data() function, as described in zmq_msg_data(3).

-
size_t message_t::size (void)
-
+
size_t message_t::size (void)
+

Maps to the zmq_msg_size() function, as described in zmq_msg_size(3).

-
void message_t::copy (message_t *src)
-
+
void message_t::copy (message_t *src)
+

Maps to the zmq_msg_copy() function, as described in zmq_msg_copy(3).

-
void message_t::move (message_t *src)
-
+
void message_t::move (message_t *src)
+

Maps to the zmq_msg_move() function, as described in zmq_msg_move(3).

-
message_t::rebuild(void) +
message_t::rebuild(void)
 message_t::rebuild(size_t size)
-message_t::rebuild(void *data, size_t size, free_fn *ffn)
-
+message_t::rebuild(void *data, size_t size, free_fn *ffn) +

Equivalent to calling the zmq_msg_close() function followed by the corresponding zmq_msg_init() function.

-

Input/output multiplexing

+
+
+
+

Input/output multiplexing

-
int poll (zmq_pollitem_t *items, int nitems, long timeout = -1)
-
+
int poll (zmq_pollitem_t *items, int nitems, long timeout = -1)
+

The poll() function is a namespaced equivalent of the zmq_poll() function, as described in zmq_poll(3).

@@ -725,6 +733,9 @@ should cast an instance of the socket_t class to (void *).
+
+
+

ERROR HANDLING

All errors reported by the underlying ØMQ C library functions are automatically @@ -732,6 +743,8 @@ converted to exceptions by the C++ language binding. The zmq::error_t is derived from the std::exception class and uses the zmq_strerror() function to convert the error code to human-readable string.

+
+

EXAMPLE

@@ -744,21 +757,26 @@ memset (msg.data (), 0, 100); s.send (msg);
+
+

SEE ALSO

+
+

AUTHORS

This ØMQ manual page was written by Martin Sustrik <sustrik@250bpm.com> and Martin Lucina <mato@kotelna.sk>.

+

diff --git a/doc/zmq_device.3 b/doc/zmq_device.3 index eb6d4c4..7888546 100644 --- a/doc/zmq_device.3 +++ b/doc/zmq_device.3 @@ -2,12 +2,12 @@ .\" Title: zmq_device .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.75.2 -.\" Date: 05/06/2011 +.\" Date: 08/29/2011 .\" Manual: 0MQ Manual -.\" Source: 0MQ 2.1.6 +.\" Source: 0MQ 2.1.9 .\" Language: English .\" -.TH "ZMQ_DEVICE" "3" "05/06/2011" "0MQ 2\&.1\&.6" "0MQ Manual" +.TH "ZMQ_DEVICE" "3" "08/29/2011" "0MQ 2\&.1\&.9" "0MQ Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/doc/zmq_device.html b/doc/zmq_device.html index 21a2fbc..f5ea972 100644 --- a/doc/zmq_device.html +++ b/doc/zmq_device.html @@ -2,15 +2,28 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - - + + zmq_device(3) - +
+

SYNOPSIS

int zmq_device (int device, const void *frontend, const void *backend);

+
+

DESCRIPTION

The zmq_device() function starts a built-in ØMQ device. The device argument @@ -646,6 +629,8 @@ bind both frontend and backend sockets. The two conventional device models are:<

zmq_device() runs in the current thread and returns only if/when the current context is closed.

+
+

QUEUE DEVICE

ZMQ_QUEUE creates a shared queue that collects requests from a set of clients, @@ -658,6 +643,8 @@ clients and the backend speaks to services. You should use ZMQ_QUEUE wi Other combinations are not documented.

Refer to zmq_socket(3) for a description of these socket types.

+
+

FORWARDER DEVICE

ZMQ_FORWARDER collects messages from a set of publishers and forwards these to @@ -669,6 +656,8 @@ publishers and the backend speaks to subscribers. You should use for the backend. Other combinations are not documented.

Refer to zmq_socket(3) for a description of these socket types.

+
+

STREAMER DEVICE

ZMQ_STREAMER collects tasks from a set of pushers and forwards these to a set @@ -680,11 +669,15 @@ and the backend speaks to pullers. You should use ZMQ_STREAMER with a Other combinations are not documented.

Refer to zmq_socket(3) for a description of these socket types.

+
+

RETURN VALUE

The zmq_device() function always returns -1 and errno set to ETERM (the ØMQ context associated with either of the specified sockets was terminated).

+
+

EXAMPLE

@@ -702,6 +695,8 @@ assert (zmq_bind (backend, "tcp://*:5556") == 0); zmq_device (ZMQ_QUEUE, frontend, backend);
+
+

SEE ALSO

zmq_bind(3) @@ -709,15 +704,21 @@ zmq_device (ZMQ_QUEUE, frontend, backend); zmq_socket(3) zmq(7)

+
+

AUTHORS

This ØMQ manual page was written by Pieter Hintjens <ph@imatix.com>

+
+

RESOURCES

Main web site: http://www.zeromq.org/

Report bugs to the ØMQ development mailing list: <zeromq-dev@lists.zeromq.org>

+
+

COPYING

Free use of this software is granted under the terms of the GNU Lesser General @@ -725,11 +726,12 @@ Public License (LGPL). For details see the files COPYING and COPYIN included with the ØMQ distribution.

+

diff --git a/doc/zmq_epgm.7 b/doc/zmq_epgm.7 index 8ee8ef3..66250f5 100644 --- a/doc/zmq_epgm.7 +++ b/doc/zmq_epgm.7 @@ -2,12 +2,12 @@ .\" Title: zmq_pgm .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.75.2 -.\" Date: 05/06/2011 +.\" Date: 08/29/2011 .\" Manual: 0MQ Manual -.\" Source: 0MQ 2.1.6 +.\" Source: 0MQ 2.1.9 .\" Language: English .\" -.TH "ZMQ_PGM" "7" "05/06/2011" "0MQ 2\&.1\&.6" "0MQ Manual" +.TH "ZMQ_PGM" "7" "08/29/2011" "0MQ 2\&.1\&.9" "0MQ Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -83,7 +83,7 @@ The interface name as defined by the operating system\&. .sp -1 .IP \(bu 2.3 .\} -The primary IPv4 address assigned to the interface, in it\(cqs numeric representation\&. +The primary IPv4 address assigned to the interface, in its numeric representation\&. .RE .if n \{\ .sp @@ -102,7 +102,7 @@ Interface names are not standardised in any way and should be assumed to be arbi .sp .5v .RE .sp -A \fImulticast address\fR is specified by an IPv4 multicast address in it\(cqs numeric representation\&. +A \fImulticast address\fR is specified by an IPv4 multicast address in its numeric representation\&. .SH "WIRE FORMAT" .sp Consecutive PGM datagrams are interpreted by 0MQ as a single continuous stream of data where 0MQ messages are not necessarily aligned with PGM datagram boundaries and a single 0MQ message may span several PGM datagrams\&. This stream of data consists of 0MQ messages encapsulated in \fIframes\fR as described in \fBzmq_tcp\fR(7)\&. diff --git a/doc/zmq_epgm.html b/doc/zmq_epgm.html index 9383d71..64e3e75 100644 --- a/doc/zmq_epgm.html +++ b/doc/zmq_epgm.html @@ -2,15 +2,28 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - - + + zmq_pgm(7) - +
+

SYNOPSIS

PGM (Pragmatic General Multicast) is a protocol for reliable multicast transport of data over IP networks.

+
+

DESCRIPTION

ØMQ implements two variants of PGM, the standard protocol where PGM datagrams @@ -610,6 +593,8 @@ not require any special privileges.

+
+

ADDRESSING

A ØMQ address string consists of two parts as follows: @@ -618,7 +603,8 @@ transport protocol to use. For the standard PGM protocol, transport sha set to pgm. For the "Encapsulated PGM" protocol transport shall be set to epgm. The meaning of the endpoint part for both the pgm and epgm transport is defined below.

-

Connecting a socket

+
+

Connecting a socket

When connecting a socket to a peer address using zmq_connect() with the pgm or epgm transport, the endpoint shall be interpreted as an interface followed by a semicolon, followed by a multicast address, followed by a colon @@ -632,7 +618,7 @@ The interface name as defined by the operating system.

  • -The primary IPv4 address assigned to the interface, in it’s numeric +The primary IPv4 address assigned to the interface, in its numeric representation.

  • @@ -648,9 +634,12 @@ names exist, thus only the primary IPv4 address may be used to specify an interface.
    -

    A multicast address is specified by an IPv4 multicast address in it’s numeric +

    A multicast address is specified by an IPv4 multicast address in its numeric representation.

    +
    +
    +

    WIRE FORMAT

    Consecutive PGM datagrams are interpreted by ØMQ as a single continuous stream @@ -658,7 +647,8 @@ of data where ØMQ messages are not necessarily aligned with PGM datagram boundaries and a single ØMQ message may span several PGM datagrams. This stream of data consists of ØMQ messages encapsulated in frames as described in zmq_tcp(7).

    -

    PGM datagram payload

    +
    +

    PGM datagram payload

    The following ABNF grammar represents the payload of a single PGM datagram as used by ØMQ:

    @@ -706,6 +696,9 @@ Third datagram payload +--------------+----------------------------+-------------+
    +
    +
    +

    EXAMPLE

    @@ -723,6 +716,8 @@ rc = zmq_connect(socket, "pgm://192.168.1.1;239.192.1.1:5555"); assert (rc == 0);
    +
    +

    SEE ALSO

    zmq_connect(3) @@ -732,17 +727,20 @@ assert (rc == 0); zmq_inproc(7) zmq(7)

    +
    +

    AUTHORS

    This ØMQ manual page was written by Martin Sustrik <sustrik@250bpm.com> and Martin Lucina <mato@kotelna.sk>.

    +

    diff --git a/doc/zmq_epgm.txt b/doc/zmq_epgm.txt index 9a48afd..68ec504 100644 --- a/doc/zmq_epgm.txt +++ b/doc/zmq_epgm.txt @@ -55,7 +55,7 @@ and a port number. An 'interface' may be specified by either of the following: * The interface name as defined by the operating system. -* The primary IPv4 address assigned to the interface, in it's numeric +* The primary IPv4 address assigned to the interface, in its numeric representation. NOTE: Interface names are not standardised in any way and should be assumed to @@ -63,7 +63,7 @@ be arbitrary and platform dependent. On Win32 platforms no short interface names exist, thus only the primary IPv4 address may be used to specify an 'interface'. -A 'multicast address' is specified by an IPv4 multicast address in it's numeric +A 'multicast address' is specified by an IPv4 multicast address in its numeric representation. diff --git a/doc/zmq_errno.3 b/doc/zmq_errno.3 index 3eeeab8..fd3694c 100644 --- a/doc/zmq_errno.3 +++ b/doc/zmq_errno.3 @@ -2,12 +2,12 @@ .\" Title: zmq_errno .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.75.2 -.\" Date: 05/06/2011 +.\" Date: 08/29/2011 .\" Manual: 0MQ Manual -.\" Source: 0MQ 2.1.6 +.\" Source: 0MQ 2.1.9 .\" Language: English .\" -.TH "ZMQ_ERRNO" "3" "05/06/2011" "0MQ 2\&.1\&.6" "0MQ Manual" +.TH "ZMQ_ERRNO" "3" "08/29/2011" "0MQ 2\&.1\&.9" "0MQ Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/doc/zmq_errno.html b/doc/zmq_errno.html index b84c35b..ee4d04b 100644 --- a/doc/zmq_errno.html +++ b/doc/zmq_errno.html @@ -2,15 +2,28 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - - + + zmq_errno(3) - +
    +

    SYNOPSIS

    int zmq_errno (void);

    +
    +

    DESCRIPTION

    The zmq_errno() function shall retrieve the value of the errno variable for @@ -604,30 +587,39 @@ variable directly.

    +
    +

    RETURN VALUE

    The zmq_errno() function shall return the value of the errno variable for the calling thread.

    +
    +

    ERRORS

    No errors are defined.

    +
    +

    SEE ALSO

    +
    +

    AUTHORS

    This ØMQ manual page was written by Martin Sustrik <sustrik@250bpm.com> and Martin Lucina <mato@kotelna.sk>.

    +

    diff --git a/doc/zmq_getsockopt.3 b/doc/zmq_getsockopt.3 index c744803..c11b5f0 100644 --- a/doc/zmq_getsockopt.3 +++ b/doc/zmq_getsockopt.3 @@ -2,12 +2,12 @@ .\" Title: zmq_getsockopt .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.75.2 -.\" Date: 05/07/2011 +.\" Date: 08/29/2011 .\" Manual: 0MQ Manual -.\" Source: 0MQ 2.1.6 +.\" Source: 0MQ 2.1.9 .\" Language: English .\" -.TH "ZMQ_GETSOCKOPT" "3" "05/07/2011" "0MQ 2\&.1\&.6" "0MQ Manual" +.TH "ZMQ_GETSOCKOPT" "3" "08/29/2011" "0MQ 2\&.1\&.9" "0MQ Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -162,7 +162,7 @@ T} .sp 1 .SS "ZMQ_SWAP: Retrieve disk offload size" .sp -The \fIZMQ_SWAP\fR option shall retrieve the disk offload (swap) size for the specified \fIsocket\fR\&. A socket which has \fIZMQ_SWAP\fR set to a non\-zero value may exceed it\(cqs high water mark; in this case outstanding messages shall be offloaded to storage on disk rather than held in memory\&. +The \fIZMQ_SWAP\fR option shall retrieve the disk offload (swap) size for the specified \fIsocket\fR\&. A socket which has \fIZMQ_SWAP\fR set to a non\-zero value may exceed its high water mark; in this case outstanding messages shall be offloaded to storage on disk rather than held in memory\&. .sp The value of \fIZMQ_SWAP\fR defines the maximum size of the swap space in bytes\&. .TS diff --git a/doc/zmq_getsockopt.html b/doc/zmq_getsockopt.html index 3c0b0e4..e77e2e1 100644 --- a/doc/zmq_getsockopt.html +++ b/doc/zmq_getsockopt.html @@ -2,15 +2,28 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - - + + zmq_getsockopt(3) - +
    +

    SYNOPSIS

    int zmq_getsockopt (void *socket, int option_name, void *option_value, size_t *option_len);

    +
    +

    DESCRIPTION

    The zmq_getsockopt() function shall retrieve the value for the option @@ -594,7 +577,8 @@ to by option_value; upon successful completion zmq_getsockopt()option_len argument to indicate the actual size of the option value stored in the buffer.

    The following options can be retrieved with the zmq_getsockopt() function:

    -

    ZMQ_TYPE: Retrieve socket type

    +
    +

    ZMQ_TYPE: Retrieve socket type

    The ZMQ_TYPE option shall retrieve the socket type for the specified socket. The socket type is specified at socket creation time and cannot be modified afterwards.

    @@ -644,7 +628,9 @@ all
    -

    ZMQ_RCVMORE: More message parts to follow

    +
    +
    +

    ZMQ_RCVMORE: More message parts to follow

    The ZMQ_RCVMORE option shall return a boolean value indicating if the multi-part message currently being read from the specified socket has more message parts to follow. If there are no message parts to follow or if the @@ -698,7 +684,9 @@ all

    -

    ZMQ_HWM: Retrieve high water mark

    +
    +
    +

    ZMQ_HWM: Retrieve high water mark

    The ZMQ_HWM option shall retrieve the high water mark for the specified socket. The high water mark is a hard limit on the maximum number of outstanding messages ØMQ shall queue in memory for any single peer that the @@ -755,10 +743,12 @@ all

    -

    ZMQ_SWAP: Retrieve disk offload size

    +
    +
    +

    ZMQ_SWAP: Retrieve disk offload size

    The ZMQ_SWAP option shall retrieve the disk offload (swap) size for the specified socket. A socket which has ZMQ_SWAP set to a non-zero value may -exceed it’s high water mark; in this case outstanding messages shall be +exceed its high water mark; in this case outstanding messages shall be offloaded to storage on disk rather than held in memory.

    The value of ZMQ_SWAP defines the maximum size of the swap space in bytes.

    @@ -807,7 +797,9 @@ all
    -

    ZMQ_AFFINITY: Retrieve I/O thread affinity

    +
    +
    +

    ZMQ_AFFINITY: Retrieve I/O thread affinity

    The ZMQ_AFFINITY option shall retrieve the I/O thread affinity for newly created connections on the specified socket.

    Affinity determines which threads from the ØMQ I/O thread pool associated with @@ -865,7 +857,9 @@ N/A

    -

    ZMQ_IDENTITY: Retrieve socket identity

    +
    +
    +

    ZMQ_IDENTITY: Retrieve socket identity

    The ZMQ_IDENTITY option shall retrieve the identity of the specified socket. Socket identity determines if existing ØMQ infrastructure (message queues, forwarding devices) shall be identified with a specific application @@ -923,7 +917,9 @@ all

    -

    ZMQ_RATE: Retrieve multicast data rate

    +
    +
    +

    ZMQ_RATE: Retrieve multicast data rate

    The ZMQ_RATE option shall retrieve the maximum send or receive data rate for multicast transports using the specified socket.

    @@ -972,7 +968,9 @@ all, when using multicast transports
    -

    ZMQ_RECOVERY_IVL: Get multicast recovery interval

    +
    +
    +

    ZMQ_RECOVERY_IVL: Get multicast recovery interval

    The ZMQ_RECOVERY_IVL option shall retrieve the recovery interval for multicast transports using the specified socket. The recovery interval determines the maximum time in seconds that a receiver can be absent from a @@ -1023,7 +1021,9 @@ all, when using multicast transports

    -

    ZMQ_RECOVERY_IVL_MSEC: Get multicast recovery interval in milliseconds

    +
    +
    +

    ZMQ_RECOVERY_IVL_MSEC: Get multicast recovery interval in milliseconds

    The ZMQ_RECOVERY_IVL’_MSEC option shall retrieve the recovery interval, in milliseconds, for multicast transports using the specified 'socket. The recovery interval determines the maximum time in seconds that a receiver @@ -1079,7 +1079,9 @@ all, when using multicast transports

    -

    ZMQ_MCAST_LOOP: Control multicast loop-back

    +
    +
    +

    ZMQ_MCAST_LOOP: Control multicast loop-back

    The ZMQ_MCAST_LOOP option controls whether data sent via multicast transports can also be received by the sending host via loop-back. A value of zero indicates that the loop-back functionality is disabled, while the default @@ -1133,7 +1135,9 @@ all, when using multicast transports

    -

    ZMQ_SNDBUF: Retrieve kernel transmit buffer size

    +
    +
    +

    ZMQ_SNDBUF: Retrieve kernel transmit buffer size

    The ZMQ_SNDBUF option shall retrieve the underlying kernel transmit buffer size for the specified socket. A value of zero means that the OS default is in effect. For details refer to your operating system documentation for the @@ -1184,7 +1188,9 @@ all

    -

    ZMQ_RCVBUF: Retrieve kernel receive buffer size

    +
    +
    +

    ZMQ_RCVBUF: Retrieve kernel receive buffer size

    The ZMQ_RCVBUF option shall retrieve the underlying kernel receive buffer size for the specified socket. A value of zero means that the OS default is in effect. For details refer to your operating system documentation for the @@ -1235,7 +1241,9 @@ all

    -

    ZMQ_LINGER: Retrieve linger period for socket shutdown

    +
    +
    +

    ZMQ_LINGER: Retrieve linger period for socket shutdown

    The ZMQ_LINGER option shall retrieve the linger period for the specified socket. The linger period determines how long pending messages which have yet to be sent to a peer shall linger in memory after a socket is closed with @@ -1313,7 +1321,9 @@ all

    -

    ZMQ_RECONNECT_IVL: Retrieve reconnection interval

    +
    +
    +

    ZMQ_RECONNECT_IVL: Retrieve reconnection interval

    The ZMQ_RECONNECT_IVL option shall retrieve the initial reconnection interval for the specified socket. The reconnection interval is the period ØMQ shall wait between attempts to reconnect disconnected peers when using @@ -1373,7 +1383,9 @@ all, only for connection-oriented transports

    -

    ZMQ_RECONNECT_IVL_MAX: Retrieve maximum reconnection interval

    +
    +
    +

    ZMQ_RECONNECT_IVL_MAX: Retrieve maximum reconnection interval

    The ZMQ_RECONNECT_IVL_MAX option shall retrieve the maximum reconnection interval for the specified socket. This is the maximum period ØMQ shall wait between attempts to reconnect. On each reconnect attempt, the previous interval @@ -1434,7 +1446,9 @@ all, only for connection-oriented transport

    -

    ZMQ_BACKLOG: Retrieve maximum length of the queue of outstanding connections

    +
    +
    +

    ZMQ_BACKLOG: Retrieve maximum length of the queue of outstanding connections

    The ZMQ_BACKLOG option shall retrieve the maximum length of the queue of outstanding peer connections for the specified socket; this only applies to connection-oriented transports. For details refer to your operating system @@ -1485,7 +1499,9 @@ all, only for connection-oriented transports

    -

    ZMQ_FD: Retrieve file descriptor associated with the socket

    +
    +
    +

    ZMQ_FD: Retrieve file descriptor associated with the socket

    The ZMQ_FD option shall retrieve the file descriptor associated with the specified socket. The returned file descriptor can be used to integrate the socket into an existing event loop; the ØMQ library shall signal any pending @@ -1558,7 +1574,9 @@ all

    -

    ZMQ_EVENTS: Retrieve socket event state

    +
    +
    +

    ZMQ_EVENTS: Retrieve socket event state

    The ZMQ_EVENTS option shall retrieve the event state for the specified socket. The returned value is a bit mask constructed by OR’ing a combination of the following event flags:

    @@ -1633,11 +1651,16 @@ all
    +
    +
    +

    RETURN VALUE

    The zmq_getsockopt() function shall return zero if successful. Otherwise it shall return -1 and set errno to one of the values defined below.

    +
    +

    ERRORS

    @@ -1678,6 +1701,8 @@ The operation was interrupted by delivery of a signal.
    +
    +

    EXAMPLE

    @@ -1690,23 +1715,28 @@ rc = zmq_getsockopt (socket, ZMQ_HWM, &hwm, &hwm_size); assert (rc == 0);
    +
    + +

    AUTHORS

    This ØMQ manual page was written by Martin Sustrik <sustrik@250bpm.com> and Martin Lucina <mato@kotelna.sk>.

    +

    diff --git a/doc/zmq_getsockopt.txt b/doc/zmq_getsockopt.txt index e211d83..1e075d7 100644 --- a/doc/zmq_getsockopt.txt +++ b/doc/zmq_getsockopt.txt @@ -83,7 +83,7 @@ ZMQ_SWAP: Retrieve disk offload size ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The 'ZMQ_SWAP' option shall retrieve the disk offload (swap) size for the specified 'socket'. A socket which has 'ZMQ_SWAP' set to a non-zero value may -exceed it's high water mark; in this case outstanding messages shall be +exceed its high water mark; in this case outstanding messages shall be offloaded to storage on disk rather than held in memory. The value of 'ZMQ_SWAP' defines the maximum size of the swap space in bytes. diff --git a/doc/zmq_init.3 b/doc/zmq_init.3 index ea2d43f..13a1686 100644 --- a/doc/zmq_init.3 +++ b/doc/zmq_init.3 @@ -2,12 +2,12 @@ .\" Title: zmq_init .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.75.2 -.\" Date: 05/06/2011 +.\" Date: 08/29/2011 .\" Manual: 0MQ Manual -.\" Source: 0MQ 2.1.6 +.\" Source: 0MQ 2.1.9 .\" Language: English .\" -.TH "ZMQ_INIT" "3" "05/06/2011" "0MQ 2\&.1\&.6" "0MQ Manual" +.TH "ZMQ_INIT" "3" "08/29/2011" "0MQ 2\&.1\&.9" "0MQ Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/doc/zmq_init.html b/doc/zmq_init.html index 17f2614..7629e0a 100644 --- a/doc/zmq_init.html +++ b/doc/zmq_init.html @@ -2,15 +2,28 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - - + + zmq_init(3) - +
    +

    SYNOPSIS

    void *zmq_init (int io_threads);

    +
    +

    DESCRIPTION

    The zmq_init() function initialises a ØMQ context.

    @@ -594,12 +577,16 @@ messaging you may set this to zero, otherwise set it to at least one.

    threads as necessary, without any additional locking required on the part of the caller.

    +
    +

    RETURN VALUE

    The zmq_init() function shall return an opaque handle to the initialised context if successful. Otherwise it shall return NULL and set errno to one of the values defined below.

    +
    +

    ERRORS

    @@ -613,22 +600,27 @@ An invalid number of io_threads was requested.
    +
    +

    SEE ALSO

    +
    +

    AUTHORS

    This ØMQ manual page was written by Martin Sustrik <sustrik@250bpm.com> and Martin Lucina <mato@kotelna.sk>.

    +

    diff --git a/doc/zmq_inproc.7 b/doc/zmq_inproc.7 index aedbed4..a0d6a5d 100644 --- a/doc/zmq_inproc.7 +++ b/doc/zmq_inproc.7 @@ -2,12 +2,12 @@ .\" Title: zmq_inproc .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.75.2 -.\" Date: 05/06/2011 +.\" Date: 08/29/2011 .\" Manual: 0MQ Manual -.\" Source: 0MQ 2.1.6 +.\" Source: 0MQ 2.1.9 .\" Language: English .\" -.TH "ZMQ_INPROC" "7" "05/06/2011" "0MQ 2\&.1\&.6" "0MQ Manual" +.TH "ZMQ_INPROC" "7" "08/29/2011" "0MQ 2\&.1\&.9" "0MQ Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/doc/zmq_inproc.html b/doc/zmq_inproc.html index 6bc6959..a46d127 100644 --- a/doc/zmq_inproc.html +++ b/doc/zmq_inproc.html @@ -2,15 +2,28 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - - + + zmq_inproc(7) - +
    +

    SYNOPSIS

    The in-process transport passes messages via memory directly between threads @@ -596,6 +577,8 @@ only you can initialise the context with zero I/O threads. See

    +
    +

    ADDRESSING

    A ØMQ address string consists of two parts as follows: @@ -603,23 +586,31 @@ only you can initialise the context with zero I/O threads. See transport protocol to use, and for the in-process transport shall be set to inproc. The meaning of the endpoint part for the in-process transport is defined below.

    -

    Assigning a local address to a socket

    +
    +

    Assigning a local address to a socket

    When assigning a local address to a socket using zmq_bind() with the inproc transport, the endpoint shall be interpreted as an arbitrary string identifying the name to create. The name must be unique within the ØMQ context associated with the socket and may be up to 256 characters in length. No other restrictions are placed on the format of the name.

    -

    Connecting a socket

    +
    +
    +

    Connecting a socket

    When connecting a socket to a peer address using zmq_connect() with the inproc transport, the endpoint shall be interpreted as an arbitrary string identifying the name to connect to. The name must have been previously created by assigning it to at least one socket within the same ØMQ context as the socket being connected.

    +
    +
    +

    WIRE FORMAT

    Not applicable.

    +
    +

    EXAMPLES

    @@ -643,6 +634,8 @@ rc = zmq_connect(socket, "inproc://my-endpoint"); assert (rc == 0);
    +
    +

    SEE ALSO

    zmq_bind(3) @@ -652,17 +645,20 @@ assert (rc == 0); zmq_pgm(7) zmq(7)

    +
    +

    AUTHORS

    This ØMQ manual page was written by Martin Sustrik <sustrik@250bpm.com> and Martin Lucina <mato@kotelna.sk>.

    +

    diff --git a/doc/zmq_ipc.7 b/doc/zmq_ipc.7 index 4aaeffa..0e19c95 100644 --- a/doc/zmq_ipc.7 +++ b/doc/zmq_ipc.7 @@ -2,12 +2,12 @@ .\" Title: zmq_ipc .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.75.2 -.\" Date: 05/06/2011 +.\" Date: 08/29/2011 .\" Manual: 0MQ Manual -.\" Source: 0MQ 2.1.6 +.\" Source: 0MQ 2.1.9 .\" Language: English .\" -.TH "ZMQ_IPC" "7" "05/06/2011" "0MQ 2\&.1\&.6" "0MQ Manual" +.TH "ZMQ_IPC" "7" "08/29/2011" "0MQ 2\&.1\&.9" "0MQ Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/doc/zmq_ipc.html b/doc/zmq_ipc.html index f07b58a..3a4a88c 100644 --- a/doc/zmq_ipc.html +++ b/doc/zmq_ipc.html @@ -2,15 +2,28 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - - + + zmq_ipc(7) - +
    +

    SYNOPSIS

    The inter-process transport passes messages between local processes using a @@ -594,6 +575,8 @@ systems that provide UNIX domain sockets.

    +
    +

    ADDRESSING

    A ØMQ address string consists of two parts as follows: @@ -601,24 +584,32 @@ systems that provide UNIX domain sockets. transport protocol to use, and for the inter-process transport shall be set to ipc. The meaning of the endpoint part for the inter-process transport is defined below.

    -

    Assigning a local address to a socket

    +
    +

    Assigning a local address to a socket

    When assigning a local address to a socket using zmq_bind() with the ipc transport, the endpoint shall be interpreted as an arbitrary string identifying the pathname to create. The pathname must be unique within the operating system namespace used by the ipc implementation, and must fulfill any restrictions placed by the operating system on the format and length of a pathname.

    -

    Connecting a socket

    +
    +
    +

    Connecting a socket

    When connecting a socket to a peer address using zmq_connect() with the ipc transport, the endpoint shall be interpreted as an arbitrary string identifying the pathname to connect to. The pathname must have been previously created within the operating system namespace by assigning it to a socket with zmq_bind().

    +
    +
    +

    WIRE FORMAT

    Not applicable.

    +
    +

    EXAMPLES

    @@ -636,6 +627,8 @@ rc = zmq_connect(socket, "ipc:///tmp/feeds/0"); assert (rc == 0);
    +
    +

    SEE ALSO

    zmq_bind(3) @@ -645,17 +638,20 @@ assert (rc == 0); zmq_pgm(7) zmq(7)

    +
    +

    AUTHORS

    This ØMQ manual page was written by Martin Sustrik <sustrik@250bpm.com> and Martin Lucina <mato@kotelna.sk>.

    +

    diff --git a/doc/zmq_msg_close.3 b/doc/zmq_msg_close.3 index 1aa60c6..99efcab 100644 --- a/doc/zmq_msg_close.3 +++ b/doc/zmq_msg_close.3 @@ -2,12 +2,12 @@ .\" Title: zmq_msg_close .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.75.2 -.\" Date: 05/06/2011 +.\" Date: 08/29/2011 .\" Manual: 0MQ Manual -.\" Source: 0MQ 2.1.6 +.\" Source: 0MQ 2.1.9 .\" Language: English .\" -.TH "ZMQ_MSG_CLOSE" "3" "05/06/2011" "0MQ 2\&.1\&.6" "0MQ Manual" +.TH "ZMQ_MSG_CLOSE" "3" "08/29/2011" "0MQ 2\&.1\&.9" "0MQ Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/doc/zmq_msg_close.html b/doc/zmq_msg_close.html index caa7741..8fd8d1b 100644 --- a/doc/zmq_msg_close.html +++ b/doc/zmq_msg_close.html @@ -2,15 +2,28 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - - + + zmq_msg_close(3) - +
    +

    SYNOPSIS

    int zmq_msg_close (zmq_msg_t *msg);

    +
    +

    DESCRIPTION

    The zmq_msg_close() function shall inform the ØMQ infrastructure that any @@ -603,11 +586,15 @@ no longer required, otherwise memory leaks may occur.

    +
    +

    RETURN VALUE

    The zmq_msg_close() function shall return zero if successful. Otherwise it shall return -1 and set errno to one of the values defined below.

    +
    +

    ERRORS

    @@ -621,6 +608,8 @@ Invalid message.
    +
    +

    SEE ALSO

    zmq_msg_init(3) @@ -630,16 +619,19 @@ Invalid message. zmq_msg_size(3) zmq(7)

    +
    +

    AUTHORS

    This ØMQ manual page was written by Martin Sustrik <sustrik@250bpm.com> and Martin Lucina <mato@kotelna.sk>.

    +

    diff --git a/doc/zmq_msg_copy.3 b/doc/zmq_msg_copy.3 index e820f14..22e669a 100644 --- a/doc/zmq_msg_copy.3 +++ b/doc/zmq_msg_copy.3 @@ -2,12 +2,12 @@ .\" Title: zmq_msg_copy .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.75.2 -.\" Date: 05/06/2011 +.\" Date: 08/29/2011 .\" Manual: 0MQ Manual -.\" Source: 0MQ 2.1.6 +.\" Source: 0MQ 2.1.9 .\" Language: English .\" -.TH "ZMQ_MSG_COPY" "3" "05/06/2011" "0MQ 2\&.1\&.6" "0MQ Manual" +.TH "ZMQ_MSG_COPY" "3" "08/29/2011" "0MQ 2\&.1\&.9" "0MQ Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/doc/zmq_msg_copy.html b/doc/zmq_msg_copy.html index d492905..6098a48 100644 --- a/doc/zmq_msg_copy.html +++ b/doc/zmq_msg_copy.html @@ -2,15 +2,28 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - - + + zmq_msg_copy(3) - +
    +

    SYNOPSIS

    int zmq_msg_copy (zmq_msg_t *dest, zmq_msg_t *src);

    +
    +

    DESCRIPTION

    The zmq_msg_copy() function shall copy the message object referenced by src @@ -612,11 +595,15 @@ copy the message content using memcpy().

    +
    +

    RETURN VALUE

    The zmq_msg_copy() function shall return zero if successful. Otherwise it shall return -1 and set errno to one of the values defined below.

    +
    +

    ERRORS

    @@ -630,6 +617,8 @@ Invalid message.
    +
    +

    SEE ALSO

    zmq_msg_move(3) @@ -639,16 +628,19 @@ Invalid message. zmq_msg_close(3) zmq(7)

    +
    +

    AUTHORS

    This ØMQ manual page was written by Martin Sustrik <sustrik@250bpm.com> and Martin Lucina <mato@kotelna.sk>.

    +

    diff --git a/doc/zmq_msg_data.3 b/doc/zmq_msg_data.3 index 74d4943..b623cb6 100644 --- a/doc/zmq_msg_data.3 +++ b/doc/zmq_msg_data.3 @@ -2,12 +2,12 @@ .\" Title: zmq_msg_data .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.75.2 -.\" Date: 05/06/2011 +.\" Date: 08/29/2011 .\" Manual: 0MQ Manual -.\" Source: 0MQ 2.1.6 +.\" Source: 0MQ 2.1.9 .\" Language: English .\" -.TH "ZMQ_MSG_DATA" "3" "05/06/2011" "0MQ 2\&.1\&.6" "0MQ Manual" +.TH "ZMQ_MSG_DATA" "3" "08/29/2011" "0MQ 2\&.1\&.9" "0MQ Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/doc/zmq_msg_data.html b/doc/zmq_msg_data.html index dbce1bc..3e06bd6 100644 --- a/doc/zmq_msg_data.html +++ b/doc/zmq_msg_data.html @@ -2,15 +2,28 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - - + + zmq_msg_data(3) - +
    +

    SYNOPSIS

    void *zmq_msg_data (zmq_msg_t *msg);

    +
    +

    DESCRIPTION

    The zmq_msg_data() function shall return a pointer to the message content of @@ -598,15 +581,21 @@ the message object referenced by msg.

    +
    +

    RETURN VALUE

    Upon successful completion, zmq_msg_data() shall return a pointer to the message content.

    +
    +

    ERRORS

    No errors are defined.

    +
    +

    SEE ALSO

    zmq_msg_size(3) @@ -616,17 +605,20 @@ message content.

    zmq_msg_close(3) zmq(7)

    + +

    AUTHORS

    This ØMQ manual page was written by Martin Sustrik <sustrik@250bpm.com> and Martin Lucina <mato@kotelna.sk>.

    +

    diff --git a/doc/zmq_msg_init.3 b/doc/zmq_msg_init.3 index 13c3e23..94e7f4a 100644 --- a/doc/zmq_msg_init.3 +++ b/doc/zmq_msg_init.3 @@ -2,12 +2,12 @@ .\" Title: zmq_msg_init .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.75.2 -.\" Date: 05/06/2011 +.\" Date: 08/29/2011 .\" Manual: 0MQ Manual -.\" Source: 0MQ 2.1.6 +.\" Source: 0MQ 2.1.9 .\" Language: English .\" -.TH "ZMQ_MSG_INIT" "3" "05/06/2011" "0MQ 2\&.1\&.6" "0MQ Manual" +.TH "ZMQ_MSG_INIT" "3" "08/29/2011" "0MQ 2\&.1\&.9" "0MQ Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/doc/zmq_msg_init.html b/doc/zmq_msg_init.html index 227b6df..5ecfe77 100644 --- a/doc/zmq_msg_init.html +++ b/doc/zmq_msg_init.html @@ -2,15 +2,28 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - - + + zmq_msg_init(3) - +
    +

    SYNOPSIS

    int zmq_msg_init (zmq_msg_t *msg);

    +
    +

    DESCRIPTION

    The zmq_msg_init() function shall initialise the message object referenced by @@ -609,15 +592,21 @@ before receiving a message with zmq_recv().

    +
    +

    RETURN VALUE

    The zmq_msg_init() function shall return zero if successful. Otherwise it shall return -1 and set errno to one of the values defined below.

    +
    +

    ERRORS

    No errors are defined.

    +
    +

    EXAMPLE

    @@ -630,6 +619,8 @@ rc = zmq_recv (socket, &msg, 0); assert (rc == 0);
    + +

    SEE ALSO

    zmq_msg_init_size(3) @@ -639,17 +630,20 @@ assert (rc == 0); zmq_msg_size(3) zmq(7)

    +
    +

    AUTHORS

    This ØMQ manual page was written by Martin Sustrik <sustrik@250bpm.com> and Martin Lucina <mato@kotelna.sk>.

    +

    diff --git a/doc/zmq_msg_init_data.3 b/doc/zmq_msg_init_data.3 index 91aea9c..2dcad31 100644 --- a/doc/zmq_msg_init_data.3 +++ b/doc/zmq_msg_init_data.3 @@ -2,12 +2,12 @@ .\" Title: zmq_msg_init_data .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.75.2 -.\" Date: 05/06/2011 +.\" Date: 08/29/2011 .\" Manual: 0MQ Manual -.\" Source: 0MQ 2.1.6 +.\" Source: 0MQ 2.1.9 .\" Language: English .\" -.TH "ZMQ_MSG_INIT_DATA" "3" "05/06/2011" "0MQ 2\&.1\&.6" "0MQ Manual" +.TH "ZMQ_MSG_INIT_DATA" "3" "08/29/2011" "0MQ 2\&.1\&.9" "0MQ Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/doc/zmq_msg_init_data.html b/doc/zmq_msg_init_data.html index aebd2a7..aa6d1c5 100644 --- a/doc/zmq_msg_init_data.html +++ b/doc/zmq_msg_init_data.html @@ -2,15 +2,28 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - - + + zmq_msg_init_data(3) - +
    +

    SYNOPSIS

    typedef void (zmq_free_fn) (void *data, void *hint);

    int zmq_msg_init_data (zmq_msg_t *msg, void *data, size_t size, zmq_free_fn *ffn, void *hint);

    +
    +

    DESCRIPTION

    The zmq_msg_init_data() function shall initialise the message object @@ -623,15 +606,21 @@ will be called from an arbitrary thread.

    +
    +

    RETURN VALUE

    The zmq_msg_init_data() function shall return zero if successful. Otherwise it shall return -1 and set errno to one of the values defined below.

    +
    +

    ERRORS

    No errors are defined.

    +
    +

    EXAMPLE

    @@ -652,6 +641,8 @@ rc = zmq_msg_init_data (&msg, data, 6, my_free, NULL); assert (rc == 0);
    +
    +

    SEE ALSO

    zmq_msg_init_size(3) @@ -661,17 +652,20 @@ assert (rc == 0); zmq_msg_size(3) zmq(7)

    +
    +

    AUTHORS

    This ØMQ manual page was written by Martin Sustrik <sustrik@250bpm.com> and Martin Lucina <mato@kotelna.sk>.

    +

    diff --git a/doc/zmq_msg_init_size.3 b/doc/zmq_msg_init_size.3 index 5a77611..31c37c4 100644 --- a/doc/zmq_msg_init_size.3 +++ b/doc/zmq_msg_init_size.3 @@ -2,12 +2,12 @@ .\" Title: zmq_msg_init_size .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.75.2 -.\" Date: 05/06/2011 +.\" Date: 08/29/2011 .\" Manual: 0MQ Manual -.\" Source: 0MQ 2.1.6 +.\" Source: 0MQ 2.1.9 .\" Language: English .\" -.TH "ZMQ_MSG_INIT_SIZE" "3" "05/06/2011" "0MQ 2\&.1\&.6" "0MQ Manual" +.TH "ZMQ_MSG_INIT_SIZE" "3" "08/29/2011" "0MQ 2\&.1\&.9" "0MQ Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/doc/zmq_msg_init_size.html b/doc/zmq_msg_init_size.html index 706788f..34c62cc 100644 --- a/doc/zmq_msg_init_size.html +++ b/doc/zmq_msg_init_size.html @@ -2,15 +2,28 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - - + + zmq_msg_init_size(3) - +
    +

    SYNOPSIS

    int zmq_msg_init_size (zmq_msg_t *msg, size_t size);

    +
    +

    DESCRIPTION

    The zmq_msg_init_size() function shall allocate any resources required to @@ -612,11 +595,15 @@ by msg to represent the newly allocated message.

    +
    +

    RETURN VALUE

    The zmq_msg_init_size() function shall return zero if successful. Otherwise it shall return -1 and set errno to one of the values defined below.

    +
    +

    ERRORS

    @@ -630,6 +617,8 @@ Insufficient storage space is available.
    +
    +

    SEE ALSO

    zmq_msg_init_data(3) @@ -639,17 +628,20 @@ Insufficient storage space is available. zmq_msg_size(3) zmq(7)

    +
    +

    AUTHORS

    This ØMQ manual page was written by Martin Sustrik <sustrik@250bpm.com> and Martin Lucina <mato@kotelna.sk>.

    +

    diff --git a/doc/zmq_msg_move.3 b/doc/zmq_msg_move.3 index 4c90bec..2f4573b 100644 --- a/doc/zmq_msg_move.3 +++ b/doc/zmq_msg_move.3 @@ -2,12 +2,12 @@ .\" Title: zmq_msg_move .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.75.2 -.\" Date: 05/06/2011 +.\" Date: 08/29/2011 .\" Manual: 0MQ Manual -.\" Source: 0MQ 2.1.6 +.\" Source: 0MQ 2.1.9 .\" Language: English .\" -.TH "ZMQ_MSG_MOVE" "3" "05/06/2011" "0MQ 2\&.1\&.6" "0MQ Manual" +.TH "ZMQ_MSG_MOVE" "3" "08/29/2011" "0MQ 2\&.1\&.9" "0MQ Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/doc/zmq_msg_move.html b/doc/zmq_msg_move.html index ed36938..63baceb 100644 --- a/doc/zmq_msg_move.html +++ b/doc/zmq_msg_move.html @@ -2,15 +2,28 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - - + + zmq_msg_move(3) - +
    +

    SYNOPSIS

    int zmq_msg_move (zmq_msg_t *dest, zmq_msg_t *src);

    +
    +

    DESCRIPTION

    The zmq_msg_move() function shall move the content of the message object @@ -601,11 +584,15 @@ The original content of dest, if any, shall be released.

    +
    +

    RETURN VALUE

    The zmq_msg_move() function shall return zero if successful. Otherwise it shall return -1 and set errno to one of the values defined below.

    +
    +

    ERRORS

    @@ -619,6 +606,8 @@ Invalid message.
    +
    +

    SEE ALSO

    zmq_msg_copy(3) @@ -628,16 +617,19 @@ Invalid message. zmq_msg_close(3) zmq(7)

    +
    +

    AUTHORS

    This ØMQ manual page was written by Martin Sustrik <sustrik@250bpm.com> and Martin Lucina <mato@kotelna.sk>.

    +

    diff --git a/doc/zmq_msg_size.3 b/doc/zmq_msg_size.3 index e295722..e7557c1 100644 --- a/doc/zmq_msg_size.3 +++ b/doc/zmq_msg_size.3 @@ -2,12 +2,12 @@ .\" Title: zmq_msg_size .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.75.2 -.\" Date: 05/06/2011 +.\" Date: 08/29/2011 .\" Manual: 0MQ Manual -.\" Source: 0MQ 2.1.6 +.\" Source: 0MQ 2.1.9 .\" Language: English .\" -.TH "ZMQ_MSG_SIZE" "3" "05/06/2011" "0MQ 2\&.1\&.6" "0MQ Manual" +.TH "ZMQ_MSG_SIZE" "3" "08/29/2011" "0MQ 2\&.1\&.9" "0MQ Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -53,7 +53,7 @@ Never access \fIzmq_msg_t\fR members directly, instead always use the \fIzmq_msg .RE .SH "RETURN VALUE" .sp -Upon successful completion, \fIzmq_msg_data()\fR shall return the size of the message content in bytes\&. +Upon successful completion, \fIzmq_msg_size()\fR shall return the size of the message content in bytes\&. .SH "ERRORS" .sp No errors are defined\&. diff --git a/doc/zmq_msg_size.html b/doc/zmq_msg_size.html index 068232d..b498438 100644 --- a/doc/zmq_msg_size.html +++ b/doc/zmq_msg_size.html @@ -2,15 +2,28 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - - + + zmq_msg_size(3) - +
    +

    SYNOPSIS

    size_t zmq_msg_size (zmq_msg_t *msg);

    +
    +

    DESCRIPTION

    The zmq_msg_size() function shall return the size in bytes of the content of @@ -598,15 +581,21 @@ the message object referenced by msg.

    +
    +

    RETURN VALUE

    -

    Upon successful completion, zmq_msg_data() shall return the size of the +

    Upon successful completion, zmq_msg_size() shall return the size of the message content in bytes.

    +
    +

    ERRORS

    No errors are defined.

    +
    +

    SEE ALSO

    zmq_msg_data(3) @@ -616,17 +605,20 @@ message content in bytes.

    zmq_msg_close(3) zmq(7)

    +
    +

    AUTHORS

    This ØMQ manual page was written by Martin Sustrik <sustrik@250bpm.com> and Martin Lucina <mato@kotelna.sk>.

    +

    diff --git a/doc/zmq_msg_size.txt b/doc/zmq_msg_size.txt index dd11235..354ca28 100644 --- a/doc/zmq_msg_size.txt +++ b/doc/zmq_msg_size.txt @@ -23,7 +23,7 @@ _zmq_msg_ family of functions. RETURN VALUE ------------ -Upon successful completion, _zmq_msg_data()_ shall return the size of the +Upon successful completion, _zmq_msg_size()_ shall return the size of the message content in bytes. diff --git a/doc/zmq_pgm.7 b/doc/zmq_pgm.7 index 8ee8ef3..66250f5 100644 --- a/doc/zmq_pgm.7 +++ b/doc/zmq_pgm.7 @@ -2,12 +2,12 @@ .\" Title: zmq_pgm .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.75.2 -.\" Date: 05/06/2011 +.\" Date: 08/29/2011 .\" Manual: 0MQ Manual -.\" Source: 0MQ 2.1.6 +.\" Source: 0MQ 2.1.9 .\" Language: English .\" -.TH "ZMQ_PGM" "7" "05/06/2011" "0MQ 2\&.1\&.6" "0MQ Manual" +.TH "ZMQ_PGM" "7" "08/29/2011" "0MQ 2\&.1\&.9" "0MQ Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -83,7 +83,7 @@ The interface name as defined by the operating system\&. .sp -1 .IP \(bu 2.3 .\} -The primary IPv4 address assigned to the interface, in it\(cqs numeric representation\&. +The primary IPv4 address assigned to the interface, in its numeric representation\&. .RE .if n \{\ .sp @@ -102,7 +102,7 @@ Interface names are not standardised in any way and should be assumed to be arbi .sp .5v .RE .sp -A \fImulticast address\fR is specified by an IPv4 multicast address in it\(cqs numeric representation\&. +A \fImulticast address\fR is specified by an IPv4 multicast address in its numeric representation\&. .SH "WIRE FORMAT" .sp Consecutive PGM datagrams are interpreted by 0MQ as a single continuous stream of data where 0MQ messages are not necessarily aligned with PGM datagram boundaries and a single 0MQ message may span several PGM datagrams\&. This stream of data consists of 0MQ messages encapsulated in \fIframes\fR as described in \fBzmq_tcp\fR(7)\&. diff --git a/doc/zmq_pgm.html b/doc/zmq_pgm.html index 9383d71..64e3e75 100644 --- a/doc/zmq_pgm.html +++ b/doc/zmq_pgm.html @@ -2,15 +2,28 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - - + + zmq_pgm(7) - +
    +

    SYNOPSIS

    PGM (Pragmatic General Multicast) is a protocol for reliable multicast transport of data over IP networks.

    +
    +

    DESCRIPTION

    ØMQ implements two variants of PGM, the standard protocol where PGM datagrams @@ -610,6 +593,8 @@ not require any special privileges.

    +
    +

    ADDRESSING

    A ØMQ address string consists of two parts as follows: @@ -618,7 +603,8 @@ transport protocol to use. For the standard PGM protocol, transport sha set to pgm. For the "Encapsulated PGM" protocol transport shall be set to epgm. The meaning of the endpoint part for both the pgm and epgm transport is defined below.

    -

    Connecting a socket

    +
    +

    Connecting a socket

    When connecting a socket to a peer address using zmq_connect() with the pgm or epgm transport, the endpoint shall be interpreted as an interface followed by a semicolon, followed by a multicast address, followed by a colon @@ -632,7 +618,7 @@ The interface name as defined by the operating system.

  • -The primary IPv4 address assigned to the interface, in it’s numeric +The primary IPv4 address assigned to the interface, in its numeric representation.

  • @@ -648,9 +634,12 @@ names exist, thus only the primary IPv4 address may be used to specify an interface.
    -

    A multicast address is specified by an IPv4 multicast address in it’s numeric +

    A multicast address is specified by an IPv4 multicast address in its numeric representation.

    +
    +
    +

    WIRE FORMAT

    Consecutive PGM datagrams are interpreted by ØMQ as a single continuous stream @@ -658,7 +647,8 @@ of data where ØMQ messages are not necessarily aligned with PGM datagram boundaries and a single ØMQ message may span several PGM datagrams. This stream of data consists of ØMQ messages encapsulated in frames as described in zmq_tcp(7).

    -

    PGM datagram payload

    +
    +

    PGM datagram payload

    The following ABNF grammar represents the payload of a single PGM datagram as used by ØMQ:

    @@ -706,6 +696,9 @@ Third datagram payload +--------------+----------------------------+-------------+
    +
    +
    +

    EXAMPLE

    @@ -723,6 +716,8 @@ rc = zmq_connect(socket, "pgm://192.168.1.1;239.192.1.1:5555"); assert (rc == 0);
    +
    +

    SEE ALSO

    zmq_connect(3) @@ -732,17 +727,20 @@ assert (rc == 0); zmq_inproc(7) zmq(7)

    +
    +

    AUTHORS

    This ØMQ manual page was written by Martin Sustrik <sustrik@250bpm.com> and Martin Lucina <mato@kotelna.sk>.

    +

    diff --git a/doc/zmq_pgm.txt b/doc/zmq_pgm.txt index 9a48afd..68ec504 100644 --- a/doc/zmq_pgm.txt +++ b/doc/zmq_pgm.txt @@ -55,7 +55,7 @@ and a port number. An 'interface' may be specified by either of the following: * The interface name as defined by the operating system. -* The primary IPv4 address assigned to the interface, in it's numeric +* The primary IPv4 address assigned to the interface, in its numeric representation. NOTE: Interface names are not standardised in any way and should be assumed to @@ -63,7 +63,7 @@ be arbitrary and platform dependent. On Win32 platforms no short interface names exist, thus only the primary IPv4 address may be used to specify an 'interface'. -A 'multicast address' is specified by an IPv4 multicast address in it's numeric +A 'multicast address' is specified by an IPv4 multicast address in its numeric representation. diff --git a/doc/zmq_poll.3 b/doc/zmq_poll.3 index f66aa94..38d76be 100644 --- a/doc/zmq_poll.3 +++ b/doc/zmq_poll.3 @@ -2,12 +2,12 @@ .\" Title: zmq_poll .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.75.2 -.\" Date: 05/07/2011 +.\" Date: 08/29/2011 .\" Manual: 0MQ Manual -.\" Source: 0MQ 2.1.6 +.\" Source: 0MQ 2.1.9 .\" Language: English .\" -.TH "ZMQ_POLL" "3" "05/07/2011" "0MQ 2\&.1\&.6" "0MQ Manual" +.TH "ZMQ_POLL" "3" "08/29/2011" "0MQ 2\&.1\&.9" "0MQ Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/doc/zmq_poll.html b/doc/zmq_poll.html index ffbcbc0..eb1c214 100644 --- a/doc/zmq_poll.html +++ b/doc/zmq_poll.html @@ -2,15 +2,28 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - - + + zmq_poll(3) - +
    +

    SYNOPSIS

    int zmq_poll (zmq_pollitem_t *items, int nitems, long timeout);

    +
    +

    DESCRIPTION

    The zmq_poll() function provides a mechanism for applications to multiplex @@ -673,6 +656,8 @@ of those interfaces in ways not defined in this documentation.

    +
    +

    RETURN VALUE

    Upon successful completion, the zmq_poll() function shall return the number @@ -680,6 +665,8 @@ of zmq_pollitem_t structures with events signaled in revent events have been signaled. Upon failure, zmq_poll() shall return -1 and set errno to one of the values defined below.

    +
    +

    ERRORS

    @@ -711,6 +698,8 @@ available.
    +
    +

    EXAMPLE

    @@ -730,6 +719,8 @@ assert (rc >= 0); /* Returned events will be stored in items[].revents */
    +
    +

    SEE ALSO

    zmq_socket(3) @@ -738,17 +729,20 @@ assert (rc >= 0); zmq(7)

    Your operating system documentation for the poll() system call.

    +
    +

    AUTHORS

    This ØMQ manual page was written by Martin Sustrik <sustrik@250bpm.com> and Martin Lucina <mato@kotelna.sk>.

    +

    diff --git a/doc/zmq_recv.3 b/doc/zmq_recv.3 index 0df4e82..6ea3446 100644 --- a/doc/zmq_recv.3 +++ b/doc/zmq_recv.3 @@ -2,12 +2,12 @@ .\" Title: zmq_recv .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.75.2 -.\" Date: 05/07/2011 +.\" Date: 08/29/2011 .\" Manual: 0MQ Manual -.\" Source: 0MQ 2.1.6 +.\" Source: 0MQ 2.1.9 .\" Language: English .\" -.TH "ZMQ_RECV" "3" "05/07/2011" "0MQ 2\&.1\&.6" "0MQ Manual" +.TH "ZMQ_RECV" "3" "08/29/2011" "0MQ 2\&.1\&.9" "0MQ Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/doc/zmq_recv.html b/doc/zmq_recv.html index db436f0..6fa3751 100644 --- a/doc/zmq_recv.html +++ b/doc/zmq_recv.html @@ -2,15 +2,28 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - - + + zmq_recv(3) - +
    +

    SYNOPSIS

    int zmq_recv (void *socket, zmq_msg_t *msg, int flags);

    +
    +

    DESCRIPTION

    The zmq_recv() function shall receive a message from the socket referenced by @@ -604,7 +587,8 @@ shall fail with errno set to EAGAIN.

    -

    Multi-part messages

    +
    +

    Multi-part messages

    A ØMQ message is 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 @@ -617,11 +601,16 @@ follow, or if the message is not composed of multiple parts, ZMQ_RCVMOREZMQ_RCVMORE shall report a value of 1, indicating that more message parts are to follow.

    +
    +
    +

    RETURN VALUE

    The zmq_recv() function shall return zero if successful. Otherwise it shall return -1 and set errno to one of the values defined below.

    +
    +

    ERRORS

    @@ -687,6 +676,8 @@ The message passed to the function was invalid.
    +
    +

    EXAMPLE

    @@ -722,6 +713,8 @@ do { } while (more);
    +
    +

    SEE ALSO

    zmq_send(3) @@ -729,17 +722,20 @@ do { zmq_socket(7) zmq(7)

    +
    +

    AUTHORS

    This ØMQ manual page was written by Martin Sustrik <sustrik@250bpm.com> and Martin Lucina <mato@kotelna.sk>.

    +

    diff --git a/doc/zmq_send.3 b/doc/zmq_send.3 index ade1b3c..3c8ce2e 100644 --- a/doc/zmq_send.3 +++ b/doc/zmq_send.3 @@ -2,12 +2,12 @@ .\" Title: zmq_send .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.75.2 -.\" Date: 05/07/2011 +.\" Date: 08/29/2011 .\" Manual: 0MQ Manual -.\" Source: 0MQ 2.1.6 +.\" Source: 0MQ 2.1.9 .\" Language: English .\" -.TH "ZMQ_SEND" "3" "05/07/2011" "0MQ 2\&.1\&.6" "0MQ Manual" +.TH "ZMQ_SEND" "3" "08/29/2011" "0MQ 2\&.1\&.9" "0MQ Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/doc/zmq_send.html b/doc/zmq_send.html index 0e17363..559eb38 100644 --- a/doc/zmq_send.html +++ b/doc/zmq_send.html @@ -2,15 +2,28 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - - + + zmq_send(3) - +
    +

    SYNOPSIS

    int zmq_send (void *socket, zmq_msg_t *msg, int flags);

    +
    +

    DESCRIPTION

    The zmq_send() function shall queue the message referenced by the msg @@ -624,7 +607,8 @@ message has been transmitted to the network, only that it has been queued on the socket and ØMQ has assumed responsibility for the message.

    -

    Multi-part messages

    +
    +

    Multi-part messages

    A ØMQ message is 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 @@ -637,11 +621,16 @@ are to follow. When the application wishes to send the final message part it does so by calling zmq_send() without the ZMQ_SNDMORE flag; this indicates that no more message parts are to follow.

    +
    +
    +

    RETURN VALUE

    The zmq_send() function shall return zero if successful. Otherwise it shall return -1 and set errno to one of the values defined below.

    +
    +

    ERRORS

    @@ -707,6 +696,8 @@ Invalid message.
    +
    +

    EXAMPLE

    @@ -732,23 +723,28 @@ rc = zmq_send (socket, &part2, ZMQ_SNDMORE); rc = zmq_send (socket, &part3, 0);
    +
    + +

    AUTHORS

    This ØMQ manual page was written by Martin Sustrik <sustrik@250bpm.com> and Martin Lucina <mato@kotelna.sk>.

    +

    diff --git a/doc/zmq_setsockopt.3 b/doc/zmq_setsockopt.3 index 16e64b1..c700d41 100644 --- a/doc/zmq_setsockopt.3 +++ b/doc/zmq_setsockopt.3 @@ -2,12 +2,12 @@ .\" Title: zmq_setsockopt .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.75.2 -.\" Date: 05/07/2011 +.\" Date: 08/29/2011 .\" Manual: 0MQ Manual -.\" Source: 0MQ 2.1.6 +.\" Source: 0MQ 2.1.9 .\" Language: English .\" -.TH "ZMQ_SETSOCKOPT" "3" "05/07/2011" "0MQ 2\&.1\&.6" "0MQ Manual" +.TH "ZMQ_SETSOCKOPT" "3" "08/29/2011" "0MQ 2\&.1\&.9" "0MQ Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -84,7 +84,7 @@ T} .sp 1 .SS "ZMQ_SWAP: Set disk offload size" .sp -The \fIZMQ_SWAP\fR option shall set the disk offload (swap) size for the specified \fIsocket\fR\&. A socket which has \fIZMQ_SWAP\fR set to a non\-zero value may exceed it\(cqs high water mark; in this case outstanding messages shall be offloaded to storage on disk rather than held in memory\&. +The \fIZMQ_SWAP\fR option shall set the disk offload (swap) size for the specified \fIsocket\fR\&. A socket which has \fIZMQ_SWAP\fR set to a non\-zero value may exceed its high water mark; in this case outstanding messages shall be offloaded to storage on disk rather than held in memory\&. .sp The value of \fIZMQ_SWAP\fR defines the maximum size of the swap space in bytes\&. .TS diff --git a/doc/zmq_setsockopt.html b/doc/zmq_setsockopt.html index de672eb..6686dc3 100644 --- a/doc/zmq_setsockopt.html +++ b/doc/zmq_setsockopt.html @@ -2,15 +2,28 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - - + + zmq_setsockopt(3) - +
    +

    SYNOPSIS

    int zmq_setsockopt (void *socket, int option_name, const void *option_value, size_t option_len);

    Caution: All options, with the exception of ZMQ_SUBSCRIBE, ZMQ_UNSUBSCRIBE and ZMQ_LINGER, only take effect for subsequent socket bind/connects.

    +
    +

    DESCRIPTION

    The zmq_setsockopt() function shall set the option specified by the @@ -593,7 +576,8 @@ ZMQ_LINGER, only take effect for subsequent socket bind/connects.

    for the ØMQ socket pointed to by the socket argument. The option_len argument is the size of the option value in bytes.

    The following socket options can be set with the zmq_setsockopt() function:

    -

    ZMQ_HWM: Set high water mark

    +
    +

    ZMQ_HWM: Set high water mark

    The ZMQ_HWM option shall set the high water mark for the specified socket. The high water mark is a hard limit on the maximum number of outstanding messages ØMQ shall queue in memory for any single peer that the specified @@ -650,9 +634,11 @@ all

    -

    ZMQ_SWAP: Set disk offload size

    +
    +
    +

    ZMQ_SWAP: Set disk offload size

    The ZMQ_SWAP option shall set the disk offload (swap) size for the specified -socket. A socket which has ZMQ_SWAP set to a non-zero value may exceed it’s +socket. A socket which has ZMQ_SWAP set to a non-zero value may exceed its high water mark; in this case outstanding messages shall be offloaded to storage on disk rather than held in memory.

    The value of ZMQ_SWAP defines the maximum size of the swap space in bytes.

    @@ -702,7 +688,9 @@ all
    -

    ZMQ_AFFINITY: Set I/O thread affinity

    +
    +
    +

    ZMQ_AFFINITY: Set I/O thread affinity

    The ZMQ_AFFINITY option shall set the I/O thread affinity for newly created connections on the specified socket.

    Affinity determines which threads from the ØMQ I/O thread pool associated with @@ -760,7 +748,9 @@ N/A

    -

    ZMQ_IDENTITY: Set socket identity

    +
    +
    +

    ZMQ_IDENTITY: Set socket identity

    The ZMQ_IDENTITY option shall set the identity of the specified socket. Socket identity determines if existing ØMQ infrastructure (message queues, forwarding devices) shall be identified with a specific application and @@ -818,7 +808,9 @@ all

    -

    ZMQ_SUBSCRIBE: Establish message filter

    +
    +
    +

    ZMQ_SUBSCRIBE: Establish message filter

    The ZMQ_SUBSCRIBE option shall establish a new message filter on a ZMQ_SUB socket. Newly created ZMQ_SUB sockets shall filter out all incoming messages, therefore you should call this option to establish an initial message filter.

    @@ -873,7 +865,9 @@ ZMQ_SUB
    -

    ZMQ_UNSUBSCRIBE: Remove message filter

    +
    +
    +

    ZMQ_UNSUBSCRIBE: Remove message filter

    The ZMQ_UNSUBSCRIBE option shall remove an existing message filter on a ZMQ_SUB socket. The filter specified must match an existing filter previously established with the ZMQ_SUBSCRIBE option. If the socket has several @@ -925,7 +919,9 @@ ZMQ_SUB

    -

    ZMQ_RATE: Set multicast data rate

    +
    +
    +

    ZMQ_RATE: Set multicast data rate

    The ZMQ_RATE option shall set the maximum send or receive data rate for multicast transports such as zmq_pgm(7) using the specified socket.

    @@ -974,7 +970,9 @@ all, when using multicast transports
    -

    ZMQ_RECOVERY_IVL: Set multicast recovery interval

    +
    +
    +

    ZMQ_RECOVERY_IVL: Set multicast recovery interval

    The ZMQ_RECOVERY_IVL option shall set the recovery interval for multicast transports using the specified socket. The recovery interval determines the maximum time in seconds that a receiver can be absent from a multicast group @@ -1035,7 +1033,9 @@ all, when using multicast transports

    -

    ZMQ_RECOVERY_IVL_MSEC: Set multicast recovery interval in milliseconds

    +
    +
    +

    ZMQ_RECOVERY_IVL_MSEC: Set multicast recovery interval in milliseconds

    The ZMQ_RECOVERY_IVL_MSEC option shall set the recovery interval, specified in milliseconds (ms) for multicast transports using the specified socket. The recovery interval determines the maximum time in milliseconds that a @@ -1101,7 +1101,9 @@ all, when using multicast transports

    -

    ZMQ_MCAST_LOOP: Control multicast loop-back

    +
    +
    +

    ZMQ_MCAST_LOOP: Control multicast loop-back

    The ZMQ_MCAST_LOOP option shall control whether data sent via multicast transports using the specified socket can also be received by the sending host via loop-back. A value of zero disables the loop-back functionality, while @@ -1155,7 +1157,9 @@ all, when using multicast transports

    -

    ZMQ_SNDBUF: Set kernel transmit buffer size

    +
    +
    +

    ZMQ_SNDBUF: Set kernel transmit buffer size

    The ZMQ_SNDBUF option shall set the underlying kernel transmit buffer size for the socket to the specified size in bytes. A value of zero means leave the OS default unchanged. For details please refer to your operating system @@ -1206,7 +1210,9 @@ all

    -

    ZMQ_RCVBUF: Set kernel receive buffer size

    +
    +
    +

    ZMQ_RCVBUF: Set kernel receive buffer size

    The ZMQ_RCVBUF option shall set the underlying kernel receive buffer size for the socket to the specified size in bytes. A value of zero means leave the OS default unchanged. For details refer to your operating system documentation @@ -1257,7 +1263,9 @@ all

    -

    ZMQ_LINGER: Set linger period for socket shutdown

    +
    +
    +

    ZMQ_LINGER: Set linger period for socket shutdown

    The ZMQ_LINGER option shall set the linger period for the specified socket. The linger period determines how long pending messages which have yet to be sent to a peer shall linger in memory after a socket is closed with @@ -1335,7 +1343,9 @@ all

    -

    ZMQ_RECONNECT_IVL: Set reconnection interval

    + +
    +

    ZMQ_RECONNECT_IVL: Set reconnection interval

    The ZMQ_RECONNECT_IVL option shall set the initial reconnection interval for the specified socket. The reconnection interval is the period ØMQ shall wait between attempts to reconnect disconnected peers when using @@ -1395,7 +1405,9 @@ all, only for connection-oriented transports

    -

    ZMQ_RECONNECT_IVL_MAX: Set maximum reconnection interval

    +
    +
    +

    ZMQ_RECONNECT_IVL_MAX: Set maximum reconnection interval

    The ZMQ_RECONNECT_IVL_MAX option shall set the maximum reconnection interval for the specified socket. This is the maximum period ØMQ shall wait between attempts to reconnect. On each reconnect attempt, the previous interval shall be @@ -1456,7 +1468,9 @@ all, only for connection-oriented transports

    -

    ZMQ_BACKLOG: Set maximum length of the queue of outstanding connections

    +
    +
    +

    ZMQ_BACKLOG: Set maximum length of the queue of outstanding connections

    The ZMQ_BACKLOG option shall set the maximum length of the queue of outstanding peer connections for the specified socket; this only applies to connection-oriented transports. For details refer to your operating system @@ -1508,11 +1522,16 @@ all, only for connection-oriented transports.

    + + +

    RETURN VALUE

    The zmq_setsockopt() function shall return zero if successful. Otherwise it shall return -1 and set errno to one of the values defined below.

    +
    +

    ERRORS

    @@ -1551,6 +1570,8 @@ The operation was interrupted by delivery of a signal.
    +
    +

    EXAMPLE

    @@ -1580,23 +1601,28 @@ rc = zmq_bind (socket, "tcp://lo:5556"); assert (rc);
    + + +

    AUTHORS

    This ØMQ manual page was written by Martin Sustrik <sustrik@250bpm.com> and Martin Lucina <mato@kotelna.sk>.

    +

    diff --git a/doc/zmq_setsockopt.txt b/doc/zmq_setsockopt.txt index 4a43d65..5911b7f 100644 --- a/doc/zmq_setsockopt.txt +++ b/doc/zmq_setsockopt.txt @@ -50,7 +50,7 @@ Applicable socket types:: all ZMQ_SWAP: Set disk offload size ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The 'ZMQ_SWAP' option shall set the disk offload (swap) size for the specified -'socket'. A socket which has 'ZMQ_SWAP' set to a non-zero value may exceed it's +'socket'. A socket which has 'ZMQ_SWAP' set to a non-zero value may exceed its high water mark; in this case outstanding messages shall be offloaded to storage on disk rather than held in memory. diff --git a/doc/zmq_socket.3 b/doc/zmq_socket.3 index 7fc7d1c..a7254e4 100644 --- a/doc/zmq_socket.3 +++ b/doc/zmq_socket.3 @@ -2,12 +2,12 @@ .\" Title: zmq_socket .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.75.2 -.\" Date: 05/06/2011 +.\" Date: 08/29/2011 .\" Manual: 0MQ Manual -.\" Source: 0MQ 2.1.6 +.\" Source: 0MQ 2.1.9 .\" Language: English .\" -.TH "ZMQ_SOCKET" "3" "05/06/2011" "0MQ 2\&.1\&.6" "0MQ Manual" +.TH "ZMQ_SOCKET" "3" "08/29/2011" "0MQ 2\&.1\&.9" "0MQ Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -237,7 +237,7 @@ T{ Compatible peer sockets T}:T{ .sp -\fIZMQ_ROUTER\fR, \fIZMQ_REP\fR +\fIZMQ_ROUTER\fR, \fIZMQ_REQ\fR, \fIZMQ_REP\fR T} T{ .sp @@ -312,7 +312,7 @@ T{ Compatible peer sockets T}:T{ .sp -\fIZMQ_DEALER\fR, \fIZMQ_REQ\fR +\fIZMQ_DEALER\fR, \fIZMQ_REQ\fR, \fIZMQ_REP\fR T} T{ .sp diff --git a/doc/zmq_socket.html b/doc/zmq_socket.html index d688fa9..9a8266d 100644 --- a/doc/zmq_socket.html +++ b/doc/zmq_socket.html @@ -2,15 +2,28 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - - + + zmq_socket(3) - +
    +

    SYNOPSIS

    void *zmq_socket (void *context, int type);

    +
    +

    DESCRIPTION

    The zmq_socket() function shall create a ØMQ socket within the specified @@ -617,10 +600,12 @@ from multiple threads except after migrating a socket from one thread to another with a "full fence" memory barrier.

    Socket types

    The following sections present the socket types defined by ØMQ, grouped by the general messaging pattern which is built from related socket types.

    -

    Request-reply pattern

    +
    +

    Request-reply pattern

    The request-reply pattern is used for sending requests from a client to one or more instances of a service, and receiving subsequent replies to each request sent.

    +

    ZMQ_REQ

    A socket of type ZMQ_REQ is used by a client to send requests to and receive replies from a service. This socket type allows only an alternating @@ -700,6 +685,8 @@ Block

    +
    +

    ZMQ_REP

    A socket of type ZMQ_REP is used by a service to receive requests from and send replies to a client. This socket type allows only an alternating @@ -778,6 +765,8 @@ Drop

    +
    +

    ZMQ_DEALER

    A socket of type ZMQ_DEALER is an advanced pattern used for extending request/reply sockets. Each message sent is load-balanced among all connected @@ -800,7 +789,7 @@ Compatible peer sockets

    -ZMQ_ROUTER, ZMQ_REP +ZMQ_ROUTER, ZMQ_REQ, ZMQ_REP

    @@ -860,6 +849,8 @@ Block
    +
    +

    ZMQ_ROUTER

    A socket of type ZMQ_ROUTER is an advanced pattern used for extending request/reply sockets. When receiving messages a ZMQ_ROUTER socket shall @@ -890,7 +881,7 @@ Compatible peer sockets

    -ZMQ_DEALER, ZMQ_REQ +ZMQ_DEALER, ZMQ_REQ, ZMQ_REP

    @@ -950,9 +941,13 @@ Drop
    -

    Publish-subscribe pattern

    +
    +
    +
    +

    Publish-subscribe pattern

    The publish-subscribe pattern is used for one-to-many distribution of data from a single publisher to multiple subscribers in a fan out fashion.

    +

    ZMQ_PUB

    A socket of type ZMQ_PUB is used by a publisher to distribute data. Messages sent are distributed in a fan out fashion to all connected peers. @@ -1029,6 +1024,8 @@ Drop

    +
    +

    ZMQ_SUB

    A socket of type ZMQ_SUB is used by a subscriber to subscribe to data distributed by a publisher. Initially a ZMQ_SUB socket is not subscribed to @@ -1103,11 +1100,15 @@ Drop

    -

    Pipeline pattern

    +
    +
    +
    +

    Pipeline pattern

    The pipeline pattern is used for distributing data to nodes arranged in a pipeline. Data always flows down the pipeline, and each stage of the pipeline is connected to at least one node. When a pipeline stage is connected to multiple nodes data is load-balanced among all connected nodes.

    +

    ZMQ_PUSH

    A socket of type ZMQ_PUSH is used by a pipeline node to send messages to downstream pipeline nodes. Messages are load-balanced to all connected @@ -1187,6 +1188,8 @@ Block

    +
    +

    ZMQ_PULL

    A socket of type ZMQ_PULL is used by a pipeline node to receive messages from upstream pipeline nodes. Messages are fair-queued from among all @@ -1261,10 +1264,14 @@ N/A

    -

    Exclusive pair pattern

    +
    +
    +
    +

    Exclusive pair pattern

    The exclusive pair pattern is used to connect a peer to precisely one other peer. This pattern is used for inter-thread communication across the inproc transport.

    +

    ZMQ_PAIR

    A socket of type ZMQ_PAIR can only be connected to a single peer at any one time. No message routing or filtering is performed on messages sent over a @@ -1353,12 +1360,18 @@ Block

    +
    +
    +
    +

    RETURN VALUE

    The zmq_socket() function shall return an opaque handle to the newly created socket if successful. Otherwise, it shall return NULL and set errno to one of the values defined below.

    +
    +

    ERRORS

    @@ -1396,6 +1409,8 @@ The context specified was terminated.
    +
    +

    SEE ALSO

    zmq_init(3) @@ -1407,17 +1422,20 @@ The context specified was terminated. zmq_inproc(7) zmq(7)

    +
    +

    AUTHORS

    This ØMQ manual page was written by Martin Sustrik <sustrik@250bpm.com> and Martin Lucina <mato@kotelna.sk>.

    +

    diff --git a/doc/zmq_socket.txt b/doc/zmq_socket.txt index 7428a91..3adf9b7 100644 --- a/doc/zmq_socket.txt +++ b/doc/zmq_socket.txt @@ -131,7 +131,7 @@ _body parts_. [horizontal] .Summary of ZMQ_DEALER characteristics -Compatible peer sockets:: 'ZMQ_ROUTER', 'ZMQ_REP' +Compatible peer sockets:: 'ZMQ_ROUTER', 'ZMQ_REQ', 'ZMQ_REP' Direction:: Bidirectional Send/receive pattern:: Unrestricted Outgoing routing strategy:: Load-balanced @@ -168,7 +168,7 @@ application must include the _delimiter_ part. [horizontal] .Summary of ZMQ_ROUTER characteristics -Compatible peer sockets:: 'ZMQ_DEALER', 'ZMQ_REQ' +Compatible peer sockets:: 'ZMQ_DEALER', 'ZMQ_REQ', 'ZMQ_REP' Direction:: Bidirectional Send/receive pattern:: Unrestricted Outgoing routing strategy:: See text diff --git a/doc/zmq_strerror.3 b/doc/zmq_strerror.3 index dfeaa3f..4544538 100644 --- a/doc/zmq_strerror.3 +++ b/doc/zmq_strerror.3 @@ -2,12 +2,12 @@ .\" Title: zmq_strerror .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.75.2 -.\" Date: 05/06/2011 +.\" Date: 08/29/2011 .\" Manual: 0MQ Manual -.\" Source: 0MQ 2.1.6 +.\" Source: 0MQ 2.1.9 .\" Language: English .\" -.TH "ZMQ_STRERROR" "3" "05/06/2011" "0MQ 2\&.1\&.6" "0MQ Manual" +.TH "ZMQ_STRERROR" "3" "08/29/2011" "0MQ 2\&.1\&.9" "0MQ Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/doc/zmq_strerror.html b/doc/zmq_strerror.html index 2648aa5..944c7cc 100644 --- a/doc/zmq_strerror.html +++ b/doc/zmq_strerror.html @@ -2,15 +2,28 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - - + + zmq_strerror(3) - +
    +

    SYNOPSIS

    const char *zmq_strerror (int errnum);

    +
    +

    DESCRIPTION

    The zmq_strerror() function shall return a pointer to an error message string @@ -592,15 +575,21 @@ defines additional error numbers over and above those defined by the operating system, applications should use zmq_strerror() in preference to the standard strerror() function.

    +
    +

    RETURN VALUE

    The zmq_strerror() function shall return a pointer to an error message string.

    +
    +

    ERRORS

    No errors are defined.

    +
    +

    EXAMPLE

    @@ -613,21 +602,26 @@ if (!ctx) { }
    +
    +

    SEE ALSO

    +
    +

    AUTHORS

    This ØMQ manual page was written by Martin Sustrik <sustrik@250bpm.com> and Martin Lucina <mato@kotelna.sk>.

    +

    diff --git a/doc/zmq_tcp.7 b/doc/zmq_tcp.7 index 5f2f6df..673f362 100644 --- a/doc/zmq_tcp.7 +++ b/doc/zmq_tcp.7 @@ -2,12 +2,12 @@ .\" Title: zmq_tcp .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.75.2 -.\" Date: 05/06/2011 +.\" Date: 08/29/2011 .\" Manual: 0MQ Manual -.\" Source: 0MQ 2.1.6 +.\" Source: 0MQ 2.1.9 .\" Language: English .\" -.TH "ZMQ_TCP" "7" "05/06/2011" "0MQ 2\&.1\&.6" "0MQ Manual" +.TH "ZMQ_TCP" "7" "08/29/2011" "0MQ 2\&.1\&.9" "0MQ Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -115,7 +115,7 @@ The DNS name of the peer\&. .sp -1 .IP \(bu 2.3 .\} -The IPv4 address of the peer, in it\(cqs numeric representation\&. +The IPv4 address of the peer, in its numeric representation\&. .RE .SH "WIRE FORMAT" .sp diff --git a/doc/zmq_tcp.html b/doc/zmq_tcp.html index 78356f5..5256a84 100644 --- a/doc/zmq_tcp.html +++ b/doc/zmq_tcp.html @@ -2,15 +2,28 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - - + + zmq_tcp(7) - +
    +

    SYNOPSIS

    TCP is an ubiquitous, reliable, unicast transport. When connecting distributed applications over a network with ØMQ, using the TCP transport will likely be your first choice.

    +
    +

    ADDRESSING

    A ØMQ address string consists of two parts as follows: transport://endpoint. The transport part specifies the underlying transport protocol to use, and for the TCP transport shall be set to tcp. The meaning of the endpoint part for the TCP transport is defined below.

    -

    Assigning a local address to a socket

    +
    +

    Assigning a local address to a socket

    When assigning a local address to a socket using zmq_bind() with the tcp transport, the endpoint shall be interpreted as an interface followed by a colon and the TCP port number to use.

    @@ -626,7 +610,9 @@ names exist, thus only the primary IPv4 address may be used to specify an interface.
    -

    Connecting a socket

    +
    +
    +

    Connecting a socket

    When connecting a socket to a peer address using zmq_connect() with the tcp transport, the endpoint shall be interpreted as a peer address followed by a colon and the TCP port number to use.

    @@ -639,11 +625,14 @@ The DNS name of the peer.
  • -The IPv4 address of the peer, in it’s numeric representation. +The IPv4 address of the peer, in its numeric representation.

  • +
    + +

    WIRE FORMAT

    ØMQ messages are transmitted over TCP in frames consisting of an encoded @@ -703,6 +692,8 @@ exceeding 254 octets:

    +-+-+-+-+-+-+-+ ...
    + +

    EXAMPLES

    @@ -729,6 +720,8 @@ rc = zmq_connect(socket, "tcp://server1:5555"); assert (rc == 0);
    + +

    SEE ALSO

    zmq_bind(3) @@ -738,17 +731,20 @@ assert (rc == 0); zmq_inproc(7) zmq(7)

    +
    +

    AUTHORS

    This ØMQ manual page was written by Martin Sustrik <sustrik@250bpm.com> and Martin Lucina <mato@kotelna.sk>.

    +

    diff --git a/doc/zmq_tcp.txt b/doc/zmq_tcp.txt index a0c945a..0117ccf 100644 --- a/doc/zmq_tcp.txt +++ b/doc/zmq_tcp.txt @@ -49,7 +49,7 @@ a colon and the TCP port number to use. A 'peer address' may be specified by either of the following: * The DNS name of the peer. -* The IPv4 address of the peer, in it's numeric representation. +* The IPv4 address of the peer, in its numeric representation. WIRE FORMAT diff --git a/doc/zmq_term.3 b/doc/zmq_term.3 index f7f3b4b..8a741b0 100644 --- a/doc/zmq_term.3 +++ b/doc/zmq_term.3 @@ -2,12 +2,12 @@ .\" Title: zmq_term .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.75.2 -.\" Date: 05/07/2011 +.\" Date: 08/29/2011 .\" Manual: 0MQ Manual -.\" Source: 0MQ 2.1.6 +.\" Source: 0MQ 2.1.9 .\" Language: English .\" -.TH "ZMQ_TERM" "3" "05/07/2011" "0MQ 2\&.1\&.6" "0MQ Manual" +.TH "ZMQ_TERM" "3" "08/29/2011" "0MQ 2\&.1\&.9" "0MQ Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/doc/zmq_term.html b/doc/zmq_term.html index db7b9d2..3a948fe 100644 --- a/doc/zmq_term.html +++ b/doc/zmq_term.html @@ -2,15 +2,28 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - - + + zmq_term(3) - +
    +

    SYNOPSIS

    int zmq_term (void *context);

    +
    +

    DESCRIPTION

    The zmq_term() function shall terminate the ØMQ context context.

    @@ -622,11 +605,15 @@ For each socket within context, all messages sent by the application

    For further details regarding socket linger behaviour refer to the ZMQ_LINGER option in zmq_setsockopt(3).

    +
    +

    RETURN VALUE

    The zmq_term() function shall return zero if successful. Otherwise it shall return -1 and set errno to one of the values defined below.

    +
    +

    ERRORS

    @@ -648,6 +635,8 @@ Termination was interrupted by a signal. It can be restarted if needed.
    +
    +

    SEE ALSO

    zmq(7) @@ -655,17 +644,20 @@ Termination was interrupted by a signal. It can be restarted if needed. zmq_close(3) zmq_setsockopt(3)

    +
    +

    AUTHORS

    This ØMQ manual page was written by Martin Sustrik <sustrik@250bpm.com> and Martin Lucina <mato@kotelna.sk>.

    +

    diff --git a/doc/zmq_version.3 b/doc/zmq_version.3 index 0acf575..c64f7d3 100644 --- a/doc/zmq_version.3 +++ b/doc/zmq_version.3 @@ -2,12 +2,12 @@ .\" Title: zmq_version .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.75.2 -.\" Date: 05/06/2011 +.\" Date: 08/29/2011 .\" Manual: 0MQ Manual -.\" Source: 0MQ 2.1.6 +.\" Source: 0MQ 2.1.9 .\" Language: English .\" -.TH "ZMQ_VERSION" "3" "05/06/2011" "0MQ 2\&.1\&.6" "0MQ Manual" +.TH "ZMQ_VERSION" "3" "08/29/2011" "0MQ 2\&.1\&.9" "0MQ Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/doc/zmq_version.html b/doc/zmq_version.html index fc59a72..9a91e09 100644 --- a/doc/zmq_version.html +++ b/doc/zmq_version.html @@ -2,15 +2,28 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - - + + zmq_version(3) - +
    +

    SYNOPSIS

    void zmq_version (int *major, int *minor, int *patch);

    +
    +

    DESCRIPTION

    The zmq_version() function shall fill in the integer variables pointed to by @@ -593,14 +576,20 @@ components of the ØMQ library version.

    dynamically linking to the ØMQ library that wish to determine the actual version of the ØMQ library they are using.

    +
    +

    RETURN VALUE

    There is no return value.

    +
    +

    ERRORS

    No errors are defined.

    +
    +

    EXAMPLE

    @@ -611,21 +600,26 @@ zmq_version (&major, &minor, &patch); printf ("Current 0MQ version is %d.%d.%d\n", major, minor, patch);
    + +

    SEE ALSO

    +
    +

    AUTHORS

    This ØMQ manual page was written by Martin Sustrik <sustrik@250bpm.com> and Martin Lucina <mato@kotelna.sk>.

    +

    diff --git a/include/zmq.h b/include/zmq.h index 5857ba8..a897888 100644 --- a/include/zmq.h +++ b/include/zmq.h @@ -28,7 +28,7 @@ extern "C" { #include #include #if defined _WIN32 -#include "winsock2.h" +#include #endif /* Handle DSO symbol visibility */ @@ -55,7 +55,7 @@ extern "C" { /* Version macros for compile-time API version detection */ #define ZMQ_VERSION_MAJOR 2 #define ZMQ_VERSION_MINOR 1 -#define ZMQ_VERSION_PATCH 7 +#define ZMQ_VERSION_PATCH 9 #define ZMQ_MAKE_VERSION(major, minor, patch) \ ((major) * 10000 + (minor) * 100 + (patch)) diff --git a/perf/local_thr.cpp b/perf/local_thr.cpp index 0dea8c6..b584c1d 100644 --- a/perf/local_thr.cpp +++ b/perf/local_thr.cpp @@ -115,7 +115,7 @@ int main (int argc, char *argv []) throughput = (unsigned long) ((double) message_count / (double) elapsed * 1000000); - megabits = (double) (throughput * message_size * 8) / 1000000; + megabits = (double) ((double) throughput * message_size * 8) / 1000000; printf ("message size: %d [B]\n", (int) message_size); printf ("message count: %d\n", (int) message_count); diff --git a/src/Makefile.am b/src/Makefile.am index ce20225..73eaf44 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -58,6 +58,7 @@ libzmq_la_SOURCES = \ select.hpp \ semaphore.hpp \ session.hpp \ + signaler.hpp \ socket_base.hpp \ stdint.hpp \ sub.hpp \ @@ -118,6 +119,7 @@ libzmq_la_SOURCES = \ req.cpp \ select.cpp \ session.cpp \ + signaler.cpp \ socket_base.cpp \ sub.cpp \ swap.cpp \ diff --git a/src/Makefile.in b/src/Makefile.in index 78e3379..f7a9436 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -93,14 +93,15 @@ am_libzmq_la_OBJECTS = libzmq_la-clock.lo libzmq_la-command.lo \ libzmq_la-poller_base.lo libzmq_la-pull.lo libzmq_la-push.lo \ libzmq_la-reaper.lo libzmq_la-pub.lo libzmq_la-rep.lo \ libzmq_la-req.lo libzmq_la-select.lo libzmq_la-session.lo \ - libzmq_la-socket_base.lo libzmq_la-sub.lo libzmq_la-swap.lo \ - libzmq_la-tcp_connecter.lo libzmq_la-tcp_listener.lo \ - libzmq_la-tcp_socket.lo libzmq_la-thread.lo \ - libzmq_la-transient_session.lo libzmq_la-trie.lo \ - libzmq_la-uuid.lo libzmq_la-xpub.lo libzmq_la-xrep.lo \ - libzmq_la-xreq.lo libzmq_la-xsub.lo libzmq_la-zmq.lo \ - libzmq_la-zmq_connecter.lo libzmq_la-zmq_engine.lo \ - libzmq_la-zmq_init.lo libzmq_la-zmq_listener.lo + libzmq_la-signaler.lo libzmq_la-socket_base.lo \ + libzmq_la-sub.lo libzmq_la-swap.lo libzmq_la-tcp_connecter.lo \ + libzmq_la-tcp_listener.lo libzmq_la-tcp_socket.lo \ + libzmq_la-thread.lo libzmq_la-transient_session.lo \ + libzmq_la-trie.lo libzmq_la-uuid.lo libzmq_la-xpub.lo \ + libzmq_la-xrep.lo libzmq_la-xreq.lo libzmq_la-xsub.lo \ + libzmq_la-zmq.lo libzmq_la-zmq_connecter.lo \ + libzmq_la-zmq_engine.lo libzmq_la-zmq_init.lo \ + libzmq_la-zmq_listener.lo libzmq_la_OBJECTS = $(am_libzmq_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) @@ -350,6 +351,7 @@ libzmq_la_SOURCES = \ select.hpp \ semaphore.hpp \ session.hpp \ + signaler.hpp \ socket_base.hpp \ stdint.hpp \ sub.hpp \ @@ -410,6 +412,7 @@ libzmq_la_SOURCES = \ req.cpp \ select.cpp \ session.cpp \ + signaler.cpp \ socket_base.cpp \ sub.cpp \ swap.cpp \ @@ -566,6 +569,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libzmq_la-req.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libzmq_la-select.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libzmq_la-session.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libzmq_la-signaler.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libzmq_la-socket_base.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libzmq_la-sub.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libzmq_la-swap.Plo@am__quote@ @@ -906,6 +910,14 @@ libzmq_la-session.lo: session.cpp @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libzmq_la_CPPFLAGS) $(CPPFLAGS) $(libzmq_la_CXXFLAGS) $(CXXFLAGS) -c -o libzmq_la-session.lo `test -f 'session.cpp' || echo '$(srcdir)/'`session.cpp +libzmq_la-signaler.lo: signaler.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libzmq_la_CPPFLAGS) $(CPPFLAGS) $(libzmq_la_CXXFLAGS) $(CXXFLAGS) -MT libzmq_la-signaler.lo -MD -MP -MF $(DEPDIR)/libzmq_la-signaler.Tpo -c -o libzmq_la-signaler.lo `test -f 'signaler.cpp' || echo '$(srcdir)/'`signaler.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libzmq_la-signaler.Tpo $(DEPDIR)/libzmq_la-signaler.Plo +@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='signaler.cpp' object='libzmq_la-signaler.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libzmq_la_CPPFLAGS) $(CPPFLAGS) $(libzmq_la_CXXFLAGS) $(CXXFLAGS) -c -o libzmq_la-signaler.lo `test -f 'signaler.cpp' || echo '$(srcdir)/'`signaler.cpp + libzmq_la-socket_base.lo: socket_base.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libzmq_la_CPPFLAGS) $(CPPFLAGS) $(libzmq_la_CXXFLAGS) $(CXXFLAGS) -MT libzmq_la-socket_base.lo -MD -MP -MF $(DEPDIR)/libzmq_la-socket_base.Tpo -c -o libzmq_la-socket_base.lo `test -f 'socket_base.cpp' || echo '$(srcdir)/'`socket_base.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libzmq_la-socket_base.Tpo $(DEPDIR)/libzmq_la-socket_base.Plo diff --git a/src/config.hpp b/src/config.hpp index f144512..db79284 100644 --- a/src/config.hpp +++ b/src/config.hpp @@ -36,6 +36,13 @@ namespace zmq // memory allocation by approximately 99.6% message_pipe_granularity = 256, + // Commands in pipe per allocation event. + command_pipe_granularity = 16, + + // Size in bytes of the largest message that is still copied around + // rather than being reference-counted. + max_vsm_size = 29, + // Determines how often does socket poll for new commands when it // still has unprocessed messages to handle. Thus, if it is set to 100, // socket will process 100 inbound messages before doing the poll. diff --git a/src/ctx.cpp b/src/ctx.cpp index 2758729..9612cd1 100644 --- a/src/ctx.cpp +++ b/src/ctx.cpp @@ -18,21 +18,23 @@ along with this program. If not, see . */ +#include "platform.hpp" +#if defined ZMQ_HAVE_WINDOWS +#include "windows.hpp" +#endif + #include #include #include "ctx.hpp" #include "socket_base.hpp" #include "io_thread.hpp" -#include "platform.hpp" #include "reaper.hpp" #include "err.hpp" #include "pipe.hpp" -#if defined ZMQ_HAVE_WINDOWS -#include "windows.h" -#else -#include "unistd.h" +#if !defined ZMQ_HAVE_WINDOWS +#include #endif zmq::ctx_t::ctx_t (uint32_t io_threads_) : @@ -141,7 +143,7 @@ int zmq::ctx_t::terminate () // Wait till reaper thread closes all the sockets. command_t cmd; - int rc = term_mailbox.recv (&cmd, true); + int rc = term_mailbox.recv (&cmd, -1); if (rc == -1 && errno == EINTR) return -1; zmq_assert (rc == 0); diff --git a/src/io_thread.cpp b/src/io_thread.cpp index be52bdd..bb7971d 100644 --- a/src/io_thread.cpp +++ b/src/io_thread.cpp @@ -72,7 +72,7 @@ void zmq::io_thread_t::in_event () // Get the next command. If there is none, exit. command_t cmd; - int rc = mailbox.recv (&cmd, false); + int rc = mailbox.recv (&cmd, 0); if (rc != 0 && errno == EINTR) continue; if (rc != 0 && errno == EAGAIN) diff --git a/src/ip.cpp b/src/ip.cpp index a63a97d..3ea1f29 100644 --- a/src/ip.cpp +++ b/src/ip.cpp @@ -54,7 +54,7 @@ static int resolve_nic_name (in_addr* addr_, char const *interface_) size_t ifr_size = sizeof (struct lifreq) * ifn.lifn_count; char *ifr = (char*) malloc (ifr_size); alloc_assert (ifr); - + // Retrieve interface names. lifconf ifc; ifc.lifc_family = AF_UNSPEC; @@ -92,7 +92,7 @@ static int resolve_nic_name (in_addr* addr_, char const *interface_) return 0; } -#elif defined ZMQ_HAVE_AIX || ZMQ_HAVE_HPUX +#elif defined ZMQ_HAVE_AIX || ZMQ_HAVE_HPUX || ZMQ_HAVE_ANDROID #include #include @@ -105,7 +105,7 @@ static int resolve_nic_name (in_addr* addr_, char const *interface_) int sd = socket (AF_INET, SOCK_DGRAM, 0); zmq_assert (sd != -1); - struct ifreq ifr; + struct ifreq ifr; // Copy interface name for ioctl get. strncpy (ifr.ifr_name, interface_, sizeof (ifr.ifr_name)); @@ -123,7 +123,7 @@ static int resolve_nic_name (in_addr* addr_, char const *interface_) struct sockaddr *sa = (struct sockaddr *) &ifr.ifr_addr; *addr_ = ((sockaddr_in*)sa)->sin_addr; - return 0; + return 0; } #elif ((defined ZMQ_HAVE_LINUX || defined ZMQ_HAVE_FREEBSD ||\ @@ -140,14 +140,14 @@ static int resolve_nic_name (in_addr* addr_, char const *interface_) // Get the addresses. ifaddrs* ifa = NULL; int rc = getifaddrs (&ifa); - zmq_assert (rc == 0); + zmq_assert (rc == 0); zmq_assert (ifa != NULL); // Find the corresponding network interface. bool found = false; for (ifaddrs *ifp = ifa; ifp != NULL ;ifp = ifp->ifa_next) - if (ifp->ifa_addr && ifp->ifa_addr->sa_family == AF_INET - && !strcmp (interface_, ifp->ifa_name)) + if (ifp->ifa_addr && ifp->ifa_addr->sa_family == AF_INET + && !strcmp (interface_, ifp->ifa_name)) { *addr_ = ((sockaddr_in*) ifp->ifa_addr)->sin_addr; found = true; @@ -294,7 +294,7 @@ int zmq::resolve_ip_hostname (sockaddr_storage *addr_, socklen_t *addr_len_, // Need to choose one to avoid duplicate results from getaddrinfo() - this // doesn't really matter, since it's not included in the addr-output. req.ai_socktype = SOCK_STREAM; - + // Avoid named services due to unclear socktype. req.ai_flags = AI_NUMERICSERV; @@ -311,9 +311,9 @@ int zmq::resolve_ip_hostname (sockaddr_storage *addr_, socklen_t *addr_len_, zmq_assert ((size_t) (res->ai_addrlen) <= sizeof (*addr_)); memcpy (addr_, res->ai_addr, res->ai_addrlen); *addr_len_ = res->ai_addrlen; - + freeaddrinfo (res); - + return 0; } diff --git a/src/mailbox.cpp b/src/mailbox.cpp index 221396b..a99a9ec 100644 --- a/src/mailbox.cpp +++ b/src/mailbox.cpp @@ -21,362 +21,62 @@ #include "mailbox.hpp" #include "platform.hpp" #include "err.hpp" -#include "fd.hpp" -#include "ip.hpp" - -#if defined ZMQ_HAVE_WINDOWS -#include "windows.hpp" -#else -#include -#include -#include -#include -#include -#include -#include -#endif - -zmq::fd_t zmq::mailbox_t::get_fd () -{ - return r; -} - -#if defined ZMQ_HAVE_WINDOWS zmq::mailbox_t::mailbox_t () { - // Create the socketpair for signalling. - int rc = make_socketpair (&r, &w); - errno_assert (rc == 0); - - // Set the writer to non-blocking mode. - unsigned long argp = 1; - rc = ioctlsocket (w, FIONBIO, &argp); - wsa_assert (rc != SOCKET_ERROR); - - // Set the reader to non-blocking mode. - argp = 1; - rc = ioctlsocket (r, FIONBIO, &argp); - wsa_assert (rc != SOCKET_ERROR); + // Get the pipe into passive state. That way, if the users starts by + // polling on the associated file descriptor it will get woken up when + // new command is posted. + bool ok = cpipe.read (NULL); + zmq_assert (!ok); + active = false; } zmq::mailbox_t::~mailbox_t () { - int rc = closesocket (w); - wsa_assert (rc != SOCKET_ERROR); - - rc = closesocket (r); - wsa_assert (rc != SOCKET_ERROR); -} - -void zmq::mailbox_t::send (const command_t &cmd_) -{ - // TODO: Implement SNDBUF auto-resizing as for POSIX platforms. - // In the mean time, the following code with assert if the send() - // call would block. - int nbytes = ::send (w, (char *)&cmd_, sizeof (command_t), 0); - wsa_assert (nbytes != SOCKET_ERROR); - zmq_assert (nbytes == sizeof (command_t)); -} - -int zmq::mailbox_t::recv (command_t *cmd_, bool block_) -{ - // If required, set the reader to blocking mode. - if (block_) { - unsigned long argp = 0; - int rc = ioctlsocket (r, FIONBIO, &argp); - wsa_assert (rc != SOCKET_ERROR); - } - - // Attempt to read an entire command. Returns EAGAIN if non-blocking - // and a command is not available. Save value of errno if we wish to pass - // it to caller. - int err = 0; - int nbytes = ::recv (r, (char *)cmd_, sizeof (command_t), 0); - if (nbytes == -1 && WSAGetLastError () == WSAEWOULDBLOCK) - err = EAGAIN; - - // Re-set the reader to non-blocking mode. - if (block_) { - unsigned long argp = 1; - int rc = ioctlsocket (r, FIONBIO, &argp); - wsa_assert (rc != SOCKET_ERROR); - } - - // If the recv failed, return with the saved errno. - if (err != 0) { - errno = err; - return -1; - } - - // Sanity check for success. - wsa_assert (nbytes != SOCKET_ERROR); - - // Check whether we haven't got half of command. - zmq_assert (nbytes == sizeof (command_t)); - - return 0; -} - -#else - -zmq::mailbox_t::mailbox_t () -{ -#ifdef PIPE_BUF - // Make sure that command can be written to the socket in atomic fashion. - // If this wasn't guaranteed, commands from different threads would be - // interleaved. - zmq_assert (sizeof (command_t) <= PIPE_BUF); -#endif - - // Create the socketpair for signaling. - int rc = make_socketpair (&r, &w); - errno_assert (rc == 0); - - // Set the writer to non-blocking mode. - int flags = fcntl (w, F_GETFL, 0); - errno_assert (flags >= 0); - rc = fcntl (w, F_SETFL, flags | O_NONBLOCK); - errno_assert (rc == 0); - -#ifndef MSG_DONTWAIT - // Set the reader to non-blocking mode. - flags = fcntl (r, F_GETFL, 0); - errno_assert (flags >= 0); - rc = fcntl (r, F_SETFL, flags | O_NONBLOCK); - errno_assert (rc == 0); -#endif + // TODO: Retrieve and deallocate commands inside the cpipe. } -zmq::mailbox_t::~mailbox_t () +zmq::fd_t zmq::mailbox_t::get_fd () { - close (w); - close (r); + return signaler.get_fd (); } void zmq::mailbox_t::send (const command_t &cmd_) { - // Attempt to write an entire command without blocking. - ssize_t nbytes; - do { - nbytes = ::send (w, &cmd_, sizeof (command_t), 0); - } while (nbytes == -1 && errno == EINTR); - - // Attempt to increase mailbox SNDBUF if the send failed. - if (nbytes == -1 && errno == EAGAIN) { - int old_sndbuf, new_sndbuf; - socklen_t sndbuf_size = sizeof old_sndbuf; - - // Retrieve current send buffer size. - int rc = getsockopt (w, SOL_SOCKET, SO_SNDBUF, &old_sndbuf, - &sndbuf_size); - errno_assert (rc == 0); - new_sndbuf = old_sndbuf * 2; - - // Double the new send buffer size. - rc = setsockopt (w, SOL_SOCKET, SO_SNDBUF, &new_sndbuf, sndbuf_size); - errno_assert (rc == 0); - - // Verify that the OS actually honored the request. - rc = getsockopt (w, SOL_SOCKET, SO_SNDBUF, &new_sndbuf, &sndbuf_size); - errno_assert (rc == 0); - zmq_assert (new_sndbuf > old_sndbuf); - - // Retry the sending operation; at this point it must succeed. - do { - nbytes = ::send (w, &cmd_, sizeof (command_t), 0); - } while (nbytes == -1 && errno == EINTR); - } - errno_assert (nbytes != -1); - - // This should never happen as we've already checked that command size is - // less than PIPE_BUF. - zmq_assert (nbytes == sizeof (command_t)); + sync.lock (); + cpipe.write (cmd_, false); + bool ok = cpipe.flush (); + sync.unlock (); + if (!ok) + signaler.send (); } -int zmq::mailbox_t::recv (command_t *cmd_, bool block_) +int zmq::mailbox_t::recv (command_t *cmd_, int timeout_) { -#ifdef MSG_DONTWAIT - - // Attempt to read an entire command. Returns EAGAIN if non-blocking - // mode is requested and a command is not available. - ssize_t nbytes = ::recv (r, cmd_, sizeof (command_t), - block_ ? 0 : MSG_DONTWAIT); - if (nbytes == -1 && (errno == EAGAIN || errno == EINTR)) - return -1; -#else - - // If required, set the reader to blocking mode. - if (block_) { - int flags = fcntl (r, F_GETFL, 0); - errno_assert (flags >= 0); - int rc = fcntl (r, F_SETFL, flags & ~O_NONBLOCK); - errno_assert (rc == 0); - } - - // Attempt to read an entire command. Returns EAGAIN if non-blocking - // and a command is not available. Save value of errno if we wish to pass - // it to caller. - int err = 0; - ssize_t nbytes = ::recv (r, cmd_, sizeof (command_t), 0); - if (nbytes == -1 && (errno == EAGAIN || errno == EINTR)) - err = errno; - - // Re-set the reader to non-blocking mode. - if (block_) { - int flags = fcntl (r, F_GETFL, 0); - errno_assert (flags >= 0); - int rc = fcntl (r, F_SETFL, flags | O_NONBLOCK); - errno_assert (rc == 0); + // Try to get the command straight away. + if (active) { + bool ok = cpipe.read (cmd_); + if (ok) + return 0; + + // If there are no more commands available, switch into passive state. + active = false; + signaler.recv (); } - // If the recv failed, return with the saved errno if set. - if (err != 0) { - errno = err; + // Wait for signal from the command sender. + int rc = signaler.wait (timeout_); + if (rc != 0 && (errno == EAGAIN || errno == EINTR)) return -1; - } - -#endif - - // Sanity check for success. - errno_assert (nbytes != -1); - - // Check whether we haven't got half of command. - zmq_assert (nbytes == sizeof (command_t)); - - return 0; -} - -#endif - -int zmq::mailbox_t::make_socketpair (fd_t *r_, fd_t *w_) -{ -#if defined ZMQ_HAVE_WINDOWS - - // Windows has no 'socketpair' function. CreatePipe is no good as pipe - // handles cannot be polled on. Here we create the socketpair by hand. - *w_ = INVALID_SOCKET; - *r_ = INVALID_SOCKET; - - // Create listening socket. - SOCKET listener; - listener = socket (AF_INET, SOCK_STREAM, 0); - wsa_assert (listener != INVALID_SOCKET); - - // Set SO_REUSEADDR and TCP_NODELAY on listening socket. - BOOL so_reuseaddr = 1; - int rc = setsockopt (listener, SOL_SOCKET, SO_REUSEADDR, - (char *)&so_reuseaddr, sizeof (so_reuseaddr)); - wsa_assert (rc != SOCKET_ERROR); - BOOL tcp_nodelay = 1; - rc = setsockopt (listener, IPPROTO_TCP, TCP_NODELAY, - (char *)&tcp_nodelay, sizeof (tcp_nodelay)); - wsa_assert (rc != SOCKET_ERROR); - - // Bind listening socket to any free local port. - struct sockaddr_in addr; - memset (&addr, 0, sizeof (addr)); - addr.sin_family = AF_INET; - addr.sin_addr.s_addr = htonl (INADDR_LOOPBACK); - addr.sin_port = 0; - rc = bind (listener, (const struct sockaddr*) &addr, sizeof (addr)); - wsa_assert (rc != SOCKET_ERROR); - - // Retrieve local port listener is bound to (into addr). - int addrlen = sizeof (addr); - rc = getsockname (listener, (struct sockaddr*) &addr, &addrlen); - wsa_assert (rc != SOCKET_ERROR); - - // Listen for incomming connections. - rc = listen (listener, 1); - wsa_assert (rc != SOCKET_ERROR); - - // Create the writer socket. - *w_ = WSASocket (AF_INET, SOCK_STREAM, 0, NULL, 0, 0); - wsa_assert (*w_ != INVALID_SOCKET); - - // Set TCP_NODELAY on writer socket. - rc = setsockopt (*w_, IPPROTO_TCP, TCP_NODELAY, - (char *)&tcp_nodelay, sizeof (tcp_nodelay)); - wsa_assert (rc != SOCKET_ERROR); - // Connect writer to the listener. - rc = connect (*w_, (sockaddr *) &addr, sizeof (addr)); - wsa_assert (rc != SOCKET_ERROR); + // We've got the signal. Now we can switch into active state. + active = true; - // Accept connection from writer. - *r_ = accept (listener, NULL, NULL); - wsa_assert (*r_ != INVALID_SOCKET); - - // We don't need the listening socket anymore. Close it. - rc = closesocket (listener); - wsa_assert (rc != SOCKET_ERROR); - - return 0; - -#elif defined ZMQ_HAVE_OPENVMS - - // Whilst OpenVMS supports socketpair - it maps to AF_INET only. Further, - // it does not set the socket options TCP_NODELAY and TCP_NODELACK which - // can lead to performance problems. - // - // The bug will be fixed in V5.6 ECO4 and beyond. In the meantime, we'll - // create the socket pair manually. - sockaddr_in lcladdr; - memset (&lcladdr, 0, sizeof (lcladdr)); - lcladdr.sin_family = AF_INET; - lcladdr.sin_addr.s_addr = htonl (INADDR_LOOPBACK); - lcladdr.sin_port = 0; - - int listener = socket (AF_INET, SOCK_STREAM, 0); - errno_assert (listener != -1); - - int on = 1; - int rc = setsockopt (listener, IPPROTO_TCP, TCP_NODELAY, &on, sizeof (on)); - errno_assert (rc != -1); - - rc = setsockopt (listener, IPPROTO_TCP, TCP_NODELACK, &on, sizeof (on)); - errno_assert (rc != -1); - - rc = bind(listener, (struct sockaddr*) &lcladdr, sizeof (lcladdr)); - errno_assert (rc != -1); - - socklen_t lcladdr_len = sizeof (lcladdr); - - rc = getsockname (listener, (struct sockaddr*) &lcladdr, &lcladdr_len); - errno_assert (rc != -1); - - rc = listen (listener, 1); - errno_assert (rc != -1); - - *w_ = socket (AF_INET, SOCK_STREAM, 0); - errno_assert (*w_ != -1); - - rc = setsockopt (*w_, IPPROTO_TCP, TCP_NODELAY, &on, sizeof (on)); - errno_assert (rc != -1); - - rc = setsockopt (*w_, IPPROTO_TCP, TCP_NODELACK, &on, sizeof (on)); - errno_assert (rc != -1); - - rc = connect (*w_, (struct sockaddr*) &lcladdr, sizeof (lcladdr)); - errno_assert (rc != -1); - - *r_ = accept (listener, NULL, NULL); - errno_assert (*r_ != -1); - - close (listener); - - return 0; - -#else // All other implementations support socketpair() - - int sv [2]; - int rc = socketpair (AF_UNIX, SOCK_STREAM, 0, sv); + // Get a command. errno_assert (rc == 0); - *w_ = sv [0]; - *r_ = sv [1]; + bool ok = cpipe.read (cmd_); + zmq_assert (ok); return 0; - -#endif } diff --git a/src/mailbox.hpp b/src/mailbox.hpp index 96bf4eb..0675b99 100644 --- a/src/mailbox.hpp +++ b/src/mailbox.hpp @@ -24,10 +24,12 @@ #include #include "platform.hpp" +#include "signaler.hpp" #include "fd.hpp" -#include "stdint.hpp" #include "config.hpp" #include "command.hpp" +#include "ypipe.hpp" +#include "mutex.hpp" namespace zmq { @@ -41,16 +43,26 @@ namespace zmq fd_t get_fd (); void send (const command_t &cmd_); - int recv (command_t *cmd_, bool block_); + int recv (command_t *cmd_, int timeout_); private: - // Write & read end of the socketpair. - fd_t w; - fd_t r; + // The pipe to store actual commands. + typedef ypipe_t cpipe_t; + cpipe_t cpipe; - // Platform-dependent function to create a socketpair. - static int make_socketpair (fd_t *r_, fd_t *w_); + // Signaler to pass signals from writer thread to reader thread. + signaler_t signaler; + + // There's only one thread receiving from the mailbox, but there + // is arbitrary number of threads sending. Given that ypipe requires + // synchronised access on both of its endpoints, we have to synchronise + // the sending side. + mutex_t sync; + + // True if the underlying pipe is active, ie. when we are allowed to + // read commands from it. + bool active; // Disable copying of mailbox_t object. mailbox_t (const mailbox_t&); diff --git a/src/pgm_receiver.cpp b/src/pgm_receiver.cpp index 4fadadc..7e7da96 100644 --- a/src/pgm_receiver.cpp +++ b/src/pgm_receiver.cpp @@ -60,8 +60,8 @@ int zmq::pgm_receiver_t::init (bool udp_encapsulation_, const char *network_) void zmq::pgm_receiver_t::plug (io_thread_t *io_thread_, i_inout *inout_) { // Retrieve PGM fds and start polling. - int socket_fd; - int waiting_pipe_fd; + fd_t socket_fd = retired_fd; + fd_t waiting_pipe_fd = retired_fd; pgm_socket.get_receiver_fds (&socket_fd, &waiting_pipe_fd); socket_handle = add_fd (socket_fd); pipe_handle = add_fd (waiting_pipe_fd); diff --git a/src/pgm_sender.cpp b/src/pgm_sender.cpp index 4d76433..7a0c951 100644 --- a/src/pgm_sender.cpp +++ b/src/pgm_sender.cpp @@ -64,10 +64,10 @@ int zmq::pgm_sender_t::init (bool udp_encapsulation_, const char *network_) void zmq::pgm_sender_t::plug (io_thread_t *io_thread_, i_inout *inout_) { // Alocate 2 fds for PGM socket. - int downlink_socket_fd = 0; - int uplink_socket_fd = 0; - int rdata_notify_fd = 0; - int pending_notify_fd = 0; + fd_t downlink_socket_fd = retired_fd; + fd_t uplink_socket_fd = retired_fd; + fd_t rdata_notify_fd = retired_fd; + fd_t pending_notify_fd = retired_fd; encoder.set_inout (inout_); diff --git a/src/pgm_socket.cpp b/src/pgm_socket.cpp index 5a82907..29ff3e6 100644 --- a/src/pgm_socket.cpp +++ b/src/pgm_socket.cpp @@ -394,8 +394,8 @@ zmq::pgm_socket_t::~pgm_socket_t () // Get receiver fds. receive_fd_ is signaled for incoming packets, // waiting_pipe_fd_ is signaled for state driven events and data. -void zmq::pgm_socket_t::get_receiver_fds (int *receive_fd_, - int *waiting_pipe_fd_) +void zmq::pgm_socket_t::get_receiver_fds (fd_t *receive_fd_, + fd_t *waiting_pipe_fd_) { socklen_t socklen; bool rc; @@ -421,8 +421,8 @@ void zmq::pgm_socket_t::get_receiver_fds (int *receive_fd_, // receive_fd_ is for incoming back-channel protocol packets. // rdata_notify_fd_ is raised for waiting repair transmissions. // pending_notify_fd_ is for state driven events. -void zmq::pgm_socket_t::get_sender_fds (int *send_fd_, int *receive_fd_, - int *rdata_notify_fd_, int *pending_notify_fd_) +void zmq::pgm_socket_t::get_sender_fds (fd_t *send_fd_, fd_t *receive_fd_, + fd_t *rdata_notify_fd_, fd_t *pending_notify_fd_) { socklen_t socklen; bool rc; diff --git a/src/pgm_socket.hpp b/src/pgm_socket.hpp index 9699aed..5ba8387 100644 --- a/src/pgm_socket.hpp +++ b/src/pgm_socket.hpp @@ -36,6 +36,7 @@ #include #endif +#include "fd.hpp" #include "options.hpp" namespace zmq @@ -56,12 +57,12 @@ namespace zmq int init (bool udp_encapsulation_, const char *network_); // Get receiver fds and store them into user allocated memory. - void get_receiver_fds (int *receive_fd_, int *waiting_pipe_fd_); + void get_receiver_fds (fd_t *receive_fd_, fd_t *waiting_pipe_fd_); // Get sender and receiver fds and store it to user allocated // memory. Receive fd is used to process NAKs from peers. - void get_sender_fds (int *send_fd_, int *receive_fd_, - int *rdata_notify_fd_, int *pending_notify_fd_); + void get_sender_fds (fd_t *send_fd_, fd_t *receive_fd_, + fd_t *rdata_notify_fd_, fd_t *pending_notify_fd_); // Send data as one APDU, transmit window owned memory. size_t send (unsigned char *data_, size_t data_len_); diff --git a/src/platform.hpp.in b/src/platform.hpp.in index 9ac777f..c89739d 100644 --- a/src/platform.hpp.in +++ b/src/platform.hpp.in @@ -160,6 +160,9 @@ /* Have AIX OS */ #undef ZMQ_HAVE_AIX +/* Have Android OS */ +#undef ZMQ_HAVE_ANDROID + /* Have Cygwin */ #undef ZMQ_HAVE_CYGWIN diff --git a/src/reaper.cpp b/src/reaper.cpp index d3ebbba..f94f7c1 100644 --- a/src/reaper.cpp +++ b/src/reaper.cpp @@ -61,7 +61,7 @@ void zmq::reaper_t::in_event () // Get the next command. If there is none, exit. command_t cmd; - int rc = mailbox.recv (&cmd, false); + int rc = mailbox.recv (&cmd, 0); if (rc != 0 && errno == EINTR) continue; if (rc != 0 && errno == EAGAIN) diff --git a/src/rep.cpp b/src/rep.cpp index dc55ad0..58c810b 100644 --- a/src/rep.cpp +++ b/src/rep.cpp @@ -85,7 +85,7 @@ int zmq::rep_t::xrecv (zmq_msg_t *msg_, int flags_) // Push it to the reply pipe. rc = xrep_t::xsend (msg_, flags_); - zmq_assert (rc == 0); + errno_assert (rc == 0); } else { // If the traceback stack is malformed, discard anything diff --git a/src/select.cpp b/src/select.cpp index 56f9f74..78fb6f6 100644 --- a/src/select.cpp +++ b/src/select.cpp @@ -19,20 +19,21 @@ */ #include "platform.hpp" +#if defined ZMQ_HAVE_WINDOWS +#include "windows.hpp" +#endif #include #include -#ifdef ZMQ_HAVE_WINDOWS -#include "winsock2.h" -#elif defined ZMQ_HAVE_HPUX +#if defined ZMQ_HAVE_HPUX #include #include #include #elif defined ZMQ_HAVE_OPENVMS #include #include -#else +#elif !defined ZMQ_HAVE_WINDOWS #include #endif diff --git a/src/signaler.cpp b/src/signaler.cpp new file mode 100644 index 0000000..fa2f123 --- /dev/null +++ b/src/signaler.cpp @@ -0,0 +1,344 @@ +/* + Copyright (c) 2007-2011 iMatix Corporation + Copyright (c) 2007-2011 Other contributors as noted in the AUTHORS file + + This file is part of 0MQ. + + 0MQ is free software; you can redistribute it and/or modify it under + the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + 0MQ is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . +*/ + +#include "platform.hpp" + +#if defined ZMQ_FORCE_SELECT +#define ZMQ_SIGNALER_WAIT_BASED_ON_SELECT +#elif defined ZMQ_FORCE_POLL +#define ZMQ_SIGNALER_WAIT_BASED_ON_POLL +#elif defined ZMQ_HAVE_LINUX || defined ZMQ_HAVE_FREEBSD ||\ + defined ZMQ_HAVE_OPENBSD || defined ZMQ_HAVE_SOLARIS ||\ + defined ZMQ_HAVE_OSX || defined ZMQ_HAVE_QNXNTO ||\ + defined ZMQ_HAVE_HPUX || defined ZMQ_HAVE_AIX ||\ + defined ZMQ_HAVE_NETBSD +#define ZMQ_SIGNALER_WAIT_BASED_ON_POLL +#elif defined ZMQ_HAVE_WINDOWS || defined ZMQ_HAVE_OPENVMS +#define ZMQ_SIGNALER_WAIT_BASED_ON_SELECT +#endif + +// On AIX, poll.h has to be included before zmq.h to get consistent +// definition of pollfd structure (AIX uses 'reqevents' and 'retnevents' +// instead of 'events' and 'revents' and defines macros to map from POSIX-y +// names to AIX-specific names). +#if defined ZMQ_SIGNALER_WAIT_BASED_ON_POLL +#include +#elif defined ZMQ_SIGNALER_WAIT_BASED_ON_SELECT +#if defined ZMQ_HAVE_WINDOWS +#include "windows.hpp" +#elif defined ZMQ_HAVE_HPUX +#include +#include +#include +#elif defined ZMQ_HAVE_OPENVMS +#include +#include +#else +#include +#endif +#endif + +#include "signaler.hpp" +#include "likely.hpp" +#include "err.hpp" +#include "fd.hpp" +#include "ip.hpp" + +#if defined ZMQ_HAVE_WINDOWS +#include "windows.hpp" +#else +#include +#include +#include +#include +#include +#include +#include +#endif + +zmq::signaler_t::signaler_t () +{ + // Create the socketpair for signaling. + int rc = make_fdpair (&r, &w); + errno_assert (rc == 0); + + // Set both fds to non-blocking mode. +#if defined ZMQ_HAVE_WINDOWS + unsigned long argp = 1; + rc = ioctlsocket (w, FIONBIO, &argp); + wsa_assert (rc != SOCKET_ERROR); + rc = ioctlsocket (r, FIONBIO, &argp); + wsa_assert (rc != SOCKET_ERROR); +#else + int flags = fcntl (w, F_GETFL, 0); + errno_assert (flags >= 0); + rc = fcntl (w, F_SETFL, flags | O_NONBLOCK); + errno_assert (rc == 0); + flags = fcntl (r, F_GETFL, 0); + errno_assert (flags >= 0); + rc = fcntl (r, F_SETFL, flags | O_NONBLOCK); + errno_assert (rc == 0); +#endif +} + +zmq::signaler_t::~signaler_t () +{ +#if defined ZMQ_HAVE_WINDOWS + int rc = closesocket (w); + wsa_assert (rc != SOCKET_ERROR); + rc = closesocket (r); + wsa_assert (rc != SOCKET_ERROR); +#else + close (w); + close (r); +#endif +} + +zmq::fd_t zmq::signaler_t::get_fd () +{ + return r; +} + +void zmq::signaler_t::send () +{ +#if defined ZMQ_HAVE_WINDOWS + unsigned char dummy = 0; + int nbytes = ::send (w, (char*) &dummy, sizeof (dummy), 0); + wsa_assert (nbytes != SOCKET_ERROR); + zmq_assert (nbytes == sizeof (dummy)); +#else + unsigned char dummy = 0; + while (true) { + ssize_t nbytes = ::send (w, &dummy, sizeof (dummy), 0); + if (unlikely (nbytes == -1 && errno == EINTR)) + continue; + zmq_assert (nbytes == sizeof (dummy)); + break; + } +#endif +} + +int zmq::signaler_t::wait (int timeout_) +{ +#ifdef ZMQ_SIGNALER_WAIT_BASED_ON_POLL + + struct pollfd pfd; + pfd.fd = r; + pfd.events = POLLIN; + int rc = poll (&pfd, 1, timeout_); + if (unlikely (rc < 0)) { + zmq_assert (errno == EINTR); + return -1; + } + else if (unlikely (rc == 0)) { + errno = EAGAIN; + return -1; + } + zmq_assert (rc == 1); + zmq_assert (pfd.revents & POLLIN); + return 0; + +#elif defined ZMQ_SIGNALER_WAIT_BASED_ON_SELECT + + fd_set fds; + FD_ZERO (&fds); + FD_SET (r, &fds); + struct timeval timeout; + if (timeout_ >= 0) { + timeout.tv_sec = timeout_ / 1000; + timeout.tv_usec = timeout_ % 1000 * 1000; + } +#ifdef ZMQ_HAVE_WINDOWS + int rc = select (0, &fds, NULL, NULL, + timeout_ >= 0 ? &timeout : NULL); + wsa_assert (rc != SOCKET_ERROR); +#else + int rc = select (r + 1, &fds, NULL, NULL, + timeout_ >= 0 ? &timeout : NULL); + if (unlikely (rc < 0)) { + zmq_assert (errno == EINTR); + return -1; + } +#endif + if (unlikely (rc == 0)) { + errno = EAGAIN; + return -1; + } + zmq_assert (rc == 1); + return 0; + +#else +#error +#endif +} + +void zmq::signaler_t::recv () +{ + // Attempt to read a signal. + unsigned char dummy; +#ifdef ZMQ_HAVE_WINDOWS + int nbytes = ::recv (r, (char*) &dummy, sizeof (dummy), 0); + wsa_assert (nbytes != SOCKET_ERROR); +#else + ssize_t nbytes = ::recv (r, &dummy, sizeof (dummy), 0); + errno_assert (nbytes >= 0); +#endif + zmq_assert (nbytes == sizeof (dummy)); + zmq_assert (dummy == 0); +} + +int zmq::signaler_t::make_fdpair (fd_t *r_, fd_t *w_) +{ +#if defined ZMQ_HAVE_WINDOWS + + // Windows has no 'socketpair' function. CreatePipe is no good as pipe + // handles cannot be polled on. Here we create the socketpair by hand. + *w_ = INVALID_SOCKET; + *r_ = INVALID_SOCKET; + + // Create listening socket. + SOCKET listener; + listener = socket (AF_INET, SOCK_STREAM, 0); + wsa_assert (listener != INVALID_SOCKET); + + // Set SO_REUSEADDR and TCP_NODELAY on listening socket. + BOOL so_reuseaddr = 1; + int rc = setsockopt (listener, SOL_SOCKET, SO_REUSEADDR, + (char *)&so_reuseaddr, sizeof (so_reuseaddr)); + wsa_assert (rc != SOCKET_ERROR); + BOOL tcp_nodelay = 1; + rc = setsockopt (listener, IPPROTO_TCP, TCP_NODELAY, + (char *)&tcp_nodelay, sizeof (tcp_nodelay)); + wsa_assert (rc != SOCKET_ERROR); + + // Bind listening socket to any free local port. + struct sockaddr_in addr; + memset (&addr, 0, sizeof (addr)); + addr.sin_family = AF_INET; + addr.sin_addr.s_addr = htonl (INADDR_LOOPBACK); + addr.sin_port = 0; + rc = bind (listener, (const struct sockaddr*) &addr, sizeof (addr)); + wsa_assert (rc != SOCKET_ERROR); + + // Retrieve local port listener is bound to (into addr). + int addrlen = sizeof (addr); + rc = getsockname (listener, (struct sockaddr*) &addr, &addrlen); + wsa_assert (rc != SOCKET_ERROR); + + // Listen for incomming connections. + rc = listen (listener, 1); + wsa_assert (rc != SOCKET_ERROR); + + // Create the writer socket. + *w_ = WSASocket (AF_INET, SOCK_STREAM, 0, NULL, 0, 0); + wsa_assert (*w_ != INVALID_SOCKET); + + // Set TCP_NODELAY on writer socket. + rc = setsockopt (*w_, IPPROTO_TCP, TCP_NODELAY, + (char *)&tcp_nodelay, sizeof (tcp_nodelay)); + wsa_assert (rc != SOCKET_ERROR); + + // Connect writer to the listener. + rc = connect (*w_, (sockaddr *) &addr, sizeof (addr)); + wsa_assert (rc != SOCKET_ERROR); + + // Accept connection from writer. + *r_ = accept (listener, NULL, NULL); + wsa_assert (*r_ != INVALID_SOCKET); + + // We don't need the listening socket anymore. Close it. + rc = closesocket (listener); + wsa_assert (rc != SOCKET_ERROR); + + return 0; + +#elif defined ZMQ_HAVE_OPENVMS + + // Whilst OpenVMS supports socketpair - it maps to AF_INET only. Further, + // it does not set the socket options TCP_NODELAY and TCP_NODELACK which + // can lead to performance problems. + // + // The bug will be fixed in V5.6 ECO4 and beyond. In the meantime, we'll + // create the socket pair manually. + sockaddr_in lcladdr; + memset (&lcladdr, 0, sizeof (lcladdr)); + lcladdr.sin_family = AF_INET; + lcladdr.sin_addr.s_addr = htonl (INADDR_LOOPBACK); + lcladdr.sin_port = 0; + + int listener = socket (AF_INET, SOCK_STREAM, 0); + errno_assert (listener != -1); + + int on = 1; + int rc = setsockopt (listener, IPPROTO_TCP, TCP_NODELAY, &on, sizeof (on)); + errno_assert (rc != -1); + + rc = setsockopt (listener, IPPROTO_TCP, TCP_NODELACK, &on, sizeof (on)); + errno_assert (rc != -1); + + rc = bind(listener, (struct sockaddr*) &lcladdr, sizeof (lcladdr)); + errno_assert (rc != -1); + + socklen_t lcladdr_len = sizeof (lcladdr); + + rc = getsockname (listener, (struct sockaddr*) &lcladdr, &lcladdr_len); + errno_assert (rc != -1); + + rc = listen (listener, 1); + errno_assert (rc != -1); + + *w_ = socket (AF_INET, SOCK_STREAM, 0); + errno_assert (*w_ != -1); + + rc = setsockopt (*w_, IPPROTO_TCP, TCP_NODELAY, &on, sizeof (on)); + errno_assert (rc != -1); + + rc = setsockopt (*w_, IPPROTO_TCP, TCP_NODELACK, &on, sizeof (on)); + errno_assert (rc != -1); + + rc = connect (*w_, (struct sockaddr*) &lcladdr, sizeof (lcladdr)); + errno_assert (rc != -1); + + *r_ = accept (listener, NULL, NULL); + errno_assert (*r_ != -1); + + close (listener); + + return 0; + +#else // All other implementations support socketpair() + + int sv [2]; + int rc = socketpair (AF_UNIX, SOCK_STREAM, 0, sv); + errno_assert (rc == 0); + *w_ = sv [0]; + *r_ = sv [1]; + return 0; + +#endif +} + +#if defined ZMQ_SIGNALER_WAIT_BASED_ON_SELECT +#undef ZMQ_SIGNALER_WAIT_BASED_ON_SELECT +#endif +#if defined ZMQ_SIGNALER_WAIT_BASED_ON_POLL +#undef ZMQ_SIGNALER_WAIT_BASED_ON_POLL +#endif + diff --git a/src/signaler.hpp b/src/signaler.hpp new file mode 100644 index 0000000..2ebff41 --- /dev/null +++ b/src/signaler.hpp @@ -0,0 +1,63 @@ +/* + Copyright (c) 2007-2011 iMatix Corporation + Copyright (c) 2007-2011 Other contributors as noted in the AUTHORS file + + This file is part of 0MQ. + + 0MQ is free software; you can redistribute it and/or modify it under + the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + 0MQ is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . +*/ + +#ifndef __ZMQ_SIGNALER_HPP_INCLUDED__ +#define __ZMQ_SIGNALER_HPP_INCLUDED__ + +#include "fd.hpp" + +namespace zmq +{ + + // This is a cross-platform equivalent to signal_fd. However, as opposed + // to signal_fd there can be at most one signal in the signaler at any + // given moment. Attempt to send a signal before receiving the previous + // one will result in undefined behaviour. + + class signaler_t + { + public: + + signaler_t (); + ~signaler_t (); + + fd_t get_fd (); + void send (); + int wait (int timeout_); + void recv (); + + private: + + // Creates a pair of filedescriptors that will be used + // to pass the signals. + static int make_fdpair (fd_t *r_, fd_t *w_); + + // Write & read end of the socketpair. + fd_t w; + fd_t r; + + // Disable copying of signaler_t object. + signaler_t (const signaler_t&); + const signaler_t &operator = (const signaler_t&); + }; + +} + +#endif diff --git a/src/socket_base.cpp b/src/socket_base.cpp index 24789b8..2167b0b 100644 --- a/src/socket_base.cpp +++ b/src/socket_base.cpp @@ -277,7 +277,7 @@ int zmq::socket_base_t::getsockopt (int option_, void *optval_, errno = EINVAL; return -1; } - int rc = process_commands (false, false); + int rc = process_commands (0, false); if (rc != 0 && (errno == EINTR || errno == ETERM)) return -1; errno_assert (rc == 0); @@ -480,7 +480,7 @@ int zmq::socket_base_t::send (::zmq_msg_t *msg_, int flags_) } // Process pending commands, if any. - int rc = process_commands (false, true); + int rc = process_commands (0, true); if (unlikely (rc != 0)) return -1; @@ -492,20 +492,37 @@ int zmq::socket_base_t::send (::zmq_msg_t *msg_, int flags_) rc = xsend (msg_, flags_); if (rc == 0) return 0; + if (unlikely (errno != EAGAIN)) + return -1; // In case of non-blocking send we'll simply propagate // the error - including EAGAIN - upwards. if (flags_ & ZMQ_NOBLOCK) return -1; + // Compute the time when the timeout should occur. + // If the timeout is infite, don't care. + clock_t clock ; + int timeout = -1; + uint64_t end = timeout < 0 ? 0 : (clock.now_ms () + timeout); + // Oops, we couldn't send the message. Wait for the next // command, process it and try to send the message again. - while (rc != 0) { - if (errno != EAGAIN) - return -1; - if (unlikely (process_commands (true, false) != 0)) + while (true) { + if (unlikely (process_commands (timeout, false) != 0)) return -1; rc = xsend (msg_, flags_); + if (rc == 0) + break; + if (unlikely (errno != EAGAIN)) + return -1; + if (timeout > 0) { + timeout = (int) (end - clock.now_ms ()); + if (timeout <= 0) { + errno = EAGAIN; + return -1; + } + } } return 0; } @@ -526,6 +543,8 @@ int zmq::socket_base_t::recv (::zmq_msg_t *msg_, int flags_) // Get the message. int rc = xrecv (msg_, flags_); + if (unlikely (rc != 0 && errno != EAGAIN)) + return -1; int err = errno; // Once every inbound_poll_rate messages check for signals and process @@ -537,7 +556,7 @@ int zmq::socket_base_t::recv (::zmq_msg_t *msg_, int flags_) // described above) from the one used by 'send'. This is because counting // ticks is more efficient than doing RDTSC all the time. if (++ticks == inbound_poll_rate) { - if (unlikely (process_commands (false, false) != 0)) + if (unlikely (process_commands (0, false) != 0)) return -1; ticks = 0; } @@ -560,7 +579,7 @@ int zmq::socket_base_t::recv (::zmq_msg_t *msg_, int flags_) if (flags_ & ZMQ_NOBLOCK) { if (errno != EAGAIN) return -1; - if (unlikely (process_commands (false, false) != 0)) + if (unlikely (process_commands (0, false) != 0)) return -1; ticks = 0; @@ -573,17 +592,33 @@ int zmq::socket_base_t::recv (::zmq_msg_t *msg_, int flags_) return rc; } + // Compute the time when the timeout should occur. + // If the timeout is infite, don't care. + clock_t clock ; + int timeout = -1; + uint64_t end = timeout < 0 ? 0 : (clock.now_ms () + timeout); + // In blocking scenario, commands are processed over and over again until // we are able to fetch a message. bool block = (ticks != 0); - while (rc != 0) { - if (errno != EAGAIN) - return -1; - if (unlikely (process_commands (block, false) != 0)) + while (true) { + if (unlikely (process_commands (block ? timeout : 0, false) != 0)) return -1; rc = xrecv (msg_, flags_); - ticks = 0; + if (rc == 0) { + ticks = 0; + break; + } + if (unlikely (errno != EAGAIN)) + return -1; block = true; + if (timeout > 0) { + timeout = (int) (end - clock.now_ms ()); + if (timeout <= 0) { + errno = EAGAIN; + return -1; + } + } } rcvmore = msg_->flags & ZMQ_MSG_MORE; @@ -655,18 +690,20 @@ void zmq::socket_base_t::start_reaping (poller_t *poller_) poller->set_pollin (handle); } -int zmq::socket_base_t::process_commands (bool block_, bool throttle_) +int zmq::socket_base_t::process_commands (int timeout_, bool throttle_) { int rc; command_t cmd; - if (block_) { - rc = mailbox.recv (&cmd, true); - if (rc == -1 && errno == EINTR) - return -1; - errno_assert (rc == 0); + if (timeout_ != 0) { + + // If we are asked to wait, simply ask mailbox to wait. + rc = mailbox.recv (&cmd, timeout_); } else { + // If we are asked not to wait, check whether we haven't processed + // commands recently, so that we can throttle the new commands. + // Get the CPU's tick counter. If 0, the counter is not available. uint64_t tsc = zmq::clock_t::rdtsc (); @@ -687,7 +724,7 @@ int zmq::socket_base_t::process_commands (bool block_, bool throttle_) } // Check whether there are any commands pending for this thread. - rc = mailbox.recv (&cmd, false); + rc = mailbox.recv (&cmd, 0); } // Process all the commands available at the moment. @@ -698,7 +735,7 @@ int zmq::socket_base_t::process_commands (bool block_, bool throttle_) return -1; errno_assert (rc == 0); cmd.destination->process_command (cmd); - rc = mailbox.recv (&cmd, false); + rc = mailbox.recv (&cmd, 0); } if (ctx_terminated) { diff --git a/src/socket_base.hpp b/src/socket_base.hpp index 333cddd..145211b 100644 --- a/src/socket_base.hpp +++ b/src/socket_base.hpp @@ -162,11 +162,11 @@ namespace zmq void attach_pipes (class reader_t *inpipe_, class writer_t *outpipe_, const blob_t &peer_identity_); - // Processes commands sent to this socket (if any). If 'block' is - // set to true, returns only after at least one command was processed. + // Processes commands sent to this socket (if any). If timeout is -1, + // returns only after at least one command was processed. // If throttle argument is true, commands are processed at most once // in a predefined time period. - int process_commands (bool block_, bool throttle_); + int process_commands (int timeout_, bool throttle_); // Handlers for incoming commands. void process_stop (); diff --git a/src/swap.cpp b/src/swap.cpp index 936f30e..5f1b261 100644 --- a/src/swap.cpp +++ b/src/swap.cpp @@ -111,7 +111,7 @@ int zmq::swap_t::init () if (fd == -1) return -1; -#ifdef ZMQ_HAVE_LINUX +#if (defined (ZMQ_HAVE_LINUX) && !defined (ZMQ_HAVE_ANDROID)) // Enable more aggresive read-ahead optimization. posix_fadvise (fd, 0, filesize, POSIX_FADV_SEQUENTIAL); #endif @@ -135,8 +135,6 @@ bool zmq::swap_t::store (zmq_msg_t *msg_) copy_to_file (&msg_flags, sizeof msg_flags); copy_to_file (zmq_msg_data (msg_), msg_size); - zmq_msg_close (msg_); - return true; } @@ -214,7 +212,7 @@ void zmq::swap_t::copy_from_file (void *buffer_, size_t count_) size_t chunk_size, remainder = count_; while (remainder > 0) { - chunk_size = std::min (remainder, + chunk_size = std::min (remainder, std::min ((size_t) (filesize - read_pos), (size_t) (block_size - read_pos % block_size))); @@ -238,7 +236,7 @@ void zmq::swap_t::copy_to_file (const void *buffer_, size_t count_) size_t chunk_size, remainder = count_; while (remainder > 0) { - chunk_size = std::min (remainder, + chunk_size = std::min (remainder, std::min ((size_t) (filesize - write_pos), (size_t) (block_size - write_pos % block_size))); diff --git a/src/tcp_connecter.cpp b/src/tcp_connecter.cpp index 71b362b..d6f73ca 100644 --- a/src/tcp_connecter.cpp +++ b/src/tcp_connecter.cpp @@ -297,7 +297,8 @@ zmq::fd_t zmq::tcp_connecter_t::connect () // Networking problems are OK. No need to assert. errno = err; errno_assert (errno == ECONNREFUSED || errno == ECONNRESET || - errno == ETIMEDOUT || errno == EHOSTUNREACH); + errno == ETIMEDOUT || errno == EHOSTUNREACH || + errno == ENETUNREACH); return retired_fd; } diff --git a/src/tcp_socket.cpp b/src/tcp_socket.cpp index f1b1d19..e7a69e4 100644 --- a/src/tcp_socket.cpp +++ b/src/tcp_socket.cpp @@ -162,6 +162,11 @@ int zmq::tcp_socket_t::open (fd_t fd_, uint64_t sndbuf_, uint64_t rcvbuf_) errno_assert (rc == 0); } +#if defined ZMQ_HAVE_OSX || defined ZMQ_HAVE_FREEBSD + int set = 1; + int rc = setsockopt (s, SOL_SOCKET, SO_NOSIGPIPE, &set, sizeof (int)); + errno_assert (rc == 0); +#endif return 0; } diff --git a/src/thread.cpp b/src/thread.cpp index 7bf9df0..8e33eff 100644 --- a/src/thread.cpp +++ b/src/thread.cpp @@ -40,7 +40,7 @@ void zmq::thread_t::start (thread_fn *tfn_, void *arg_) arg =arg_; descriptor = (HANDLE) _beginthreadex (NULL, 0, &::thread_routine, this, 0 , NULL); - win_assert (descriptor != NULL); + win_assert (descriptor != NULL); } void zmq::thread_t::stop () @@ -59,17 +59,19 @@ extern "C" { static void *thread_routine (void *arg_) { - #if !defined ZMQ_HAVE_OPENVMS +#if !defined ZMQ_HAVE_OPENVMS // Following code will guarantee more predictable latecnies as it'll // disallow any signal handling in the I/O thread. sigset_t signal_set; int rc = sigfillset (&signal_set); errno_assert (rc == 0); +# if !defined ZMQ_HAVE_ANDROID rc = pthread_sigmask (SIG_BLOCK, &signal_set, NULL); - errno_assert (rc == 0); - #endif + posix_assert (rc); +# endif +#endif - zmq::thread_t *self = (zmq::thread_t*) arg_; + zmq::thread_t *self = (zmq::thread_t*) arg_; self->tfn (self->arg); return NULL; } @@ -80,13 +82,13 @@ void zmq::thread_t::start (thread_fn *tfn_, void *arg_) tfn = tfn_; arg =arg_; int rc = pthread_create (&descriptor, NULL, thread_routine, this); - errno_assert (rc == 0); + posix_assert (rc); } void zmq::thread_t::stop () { int rc = pthread_join (descriptor, NULL); - errno_assert (rc == 0); + posix_assert (rc); } #endif diff --git a/src/windows.hpp b/src/windows.hpp index 5133875..a821339 100644 --- a/src/windows.hpp +++ b/src/windows.hpp @@ -24,50 +24,148 @@ // The purpose of this header file is to turn on only the items actually needed // on the windows platform. -#define _WINSOCKAPI_ -#ifndef NOMINMAX -#define NOMINMAX // No min and max functions, these clash with C++. -#endif +// Disable deprecation warning. #define _CRT_SECURE_NO_WARNINGS #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif -#ifndef NOUSER // No USER defines and routines. -#define NOUSER +#ifndef NOGDICAPMASKS +#define NOGDICAPMASKS // CC_*, LC_*, PC_*, CP_*, TC_*, RC_ #endif -#ifndef NOMCX // No Modem Configuration Extensions. -#define NOMCX +#ifndef NOVIRTUALKEYCODES +#define NOVIRTUALKEYCODES // VK_* #endif -#ifndef NOIME // No Input Method Editor. -#define NOIME +#ifndef NOWINMESSAGES +#define NOWINMESSAGES // WM_*, EM_*, LB_*, CB_* #endif -#ifndef NOSOUND // No Sound driver routines. -#define NOSOUND +#ifndef NOWINSTYLES +#define NOWINSTYLES // WS_*, CS_*, ES_*, LBS_*, SBS_*, CBS_* #endif - -#ifdef ZMQ_HAVE_MINGW32 -#ifdef WINVER -#undef WINVER +#ifndef NOSYSMETRICS +#define NOSYSMETRICS // SM_* #endif -#define WINVER 0x0501 +#ifndef NOMENUS +#define NOMENUS // MF_* +#endif +#ifndef NOICONS +#define NOICONS // IDI_* +#endif +#ifndef NOKEYSTATES +#define NOKEYSTATES // MK_* +#endif +#ifndef NOSYSCOMMANDS +#define NOSYSCOMMANDS // SC_* +#endif +#ifndef NORASTEROPS +#define NORASTEROPS // Binary and Tertiary raster ops +#endif +#ifndef NOSHOWWINDOW +#define NOSHOWWINDOW // SW_* +#endif +#ifndef OEMRESOURCE +#define OEMRESOURCE // OEM Resource values +#endif +#ifndef NOATOM +#define NOATOM // Atom Manager routines +#endif +#ifndef NOCLIPBOARD +#define NOCLIPBOARD // Clipboard routines +#endif +#ifndef NOCOLOR +#define NOCOLOR // Screen colors +#endif +#ifndef NOCTLMGR +#define NOCTLMGR // Control and Dialog routines +#endif +#ifndef NODRAWTEXT +#define NODRAWTEXT // DrawText() and DT_* +#endif +#ifndef NOGDI +#define NOGDI // All GDI defines and routines +#endif +#ifndef NOKERNEL +#define NOKERNEL // All KERNEL defines and routines +#endif +#ifndef NOUSER +#define NOUSER // All USER defines and routines +#endif +#ifndef NONLS +#define NONLS // All NLS defines and routines +#endif +#ifndef NOMB +#define NOMB // MB_* and MessageBox() +#endif +#ifndef NOMEMMGR +#define NOMEMMGR // GMEM_*, LMEM_*, GHND, LHND, associated routines +#endif +#ifndef NOMETAFILE +#define NOMETAFILE // typedef METAFILEPICT +#endif +#ifndef NOMINMAX +#define NOMINMAX // Macros min(a,b) and max(a,b) +#endif +#ifndef NOMSG +#define NOMSG // typedef MSG and associated routines +#endif +#ifndef NOOPENFILE +#define NOOPENFILE // OpenFile(), OemToAnsi, AnsiToOem, and OF_* +#endif +#ifndef NOSCROLL +#define NOSCROLL // SB_* and scrolling routines +#endif +#ifndef NOSERVICE +#define NOSERVICE // All Service Controller routines, SERVICE_ equates, etc. +#endif +#ifndef NOSOUND +#define NOSOUND // Sound driver routines +#endif +#ifndef NOTEXTMETRIC +#define NOTEXTMETRIC // typedef TEXTMETRIC and associated routines +#endif +#ifndef NOWH +#define NOWH // SetWindowsHook and WH_* +#endif +#ifndef NOWINOFFSETS +#define NOWINOFFSETS // GWL_*, GCL_*, associated routines +#endif +#ifndef NOCOMM +#define NOCOMM // COMM driver routines +#endif +#ifndef NOKANJI +#define NOKANJI // Kanji support stuff. +#endif +#ifndef NOHELP +#define NOHELP // Help engine interface. +#endif +#ifndef NOPROFILER +#define NOPROFILER // Profiler interface. +#endif +#ifndef NODEFERWINDOWPOS +#define NODEFERWINDOWPOS // DeferWindowPos routines +#endif +#ifndef NOMCX +#define NOMCX // Modem Configuration ExtensionsA #endif -#include - -// MSVC++ 2005 on Win2000 does not define _WIN32_WINNT. +// Set target version to Windows Server 2003, Windows XP/SP1 or higher. #ifndef _WIN32_WINNT -#define _WIN32_WINNT WINVER +#define _WIN32_WINNT 0x0501 #endif -// Enable winsock (not included when WIN32_LEAN_AND_MEAN is defined). -#if(_WIN32_WINNT >= 0x0400) -#include -#include +#include + +#ifdef __MINGW32__ +// Require Windows XP or higher with MinGW for getaddrinfo(). +#if(_WIN32_WINNT >= 0x0501) #else -#include -#endif +#undef _WIN32_WINNT +#define _WIN32_WINNT 0x0501 +#endif /* _WIN32_WINNT >= 0x0501 */ +#endif /* __MINGW32__ */ +#include +#include #include #include #include diff --git a/src/xrep.cpp b/src/xrep.cpp index 7317056..ac4150d 100644 --- a/src/xrep.cpp +++ b/src/xrep.cpp @@ -189,10 +189,6 @@ int zmq::xrep_t::xsend (zmq_msg_t *msg_, int flags_) it->second.active = false; more_out = false; current_out = NULL; - rc = zmq_msg_close (&empty); - zmq_assert (rc == 0); - errno = EAGAIN; - return -1; } rc = zmq_msg_close (&empty); zmq_assert (rc == 0); diff --git a/src/zmq.cpp b/src/zmq.cpp index 85f7d62..dce9630 100644 --- a/src/zmq.cpp +++ b/src/zmq.cpp @@ -412,7 +412,8 @@ int zmq_poll (zmq_pollitem_t *items_, int nitems_, long timeout_) Sleep (timeout_ > 0 ? timeout_ / 1000 : INFINITE); return 0; #else - return usleep (timeout_); + usleep (timeout_); + return 0; #endif } @@ -565,7 +566,8 @@ int zmq_poll (zmq_pollitem_t *items_, int nitems_, long timeout_) Sleep (timeout_ > 0 ? timeout_ / 1000 : INFINITE); return 0; #else - return usleep (timeout_); + usleep (timeout_); + return 0; #endif } @@ -649,13 +651,21 @@ int zmq_poll (zmq_pollitem_t *items_, int nitems_, long timeout_) memcpy (&inset, &pollset_in, sizeof (fd_set)); memcpy (&outset, &pollset_out, sizeof (fd_set)); memcpy (&errset, &pollset_err, sizeof (fd_set)); - int rc = select (maxfd + 1, &inset, &outset, &errset, ptimeout); #if defined ZMQ_HAVE_WINDOWS - wsa_assert (rc != SOCKET_ERROR); + int rc = select (0, &inset, &outset, &errset, ptimeout); + if (unlikely (rc == SOCKET_ERROR)) { + zmq::wsa_error_to_errno (); + if (errno == ENOTSOCK) + return -1; + wsa_assert (false); + } #else - if (rc == -1 && errno == EINTR) - return -1; - errno_assert (rc >= 0); + int rc = select (maxfd + 1, &inset, &outset, &errset, ptimeout); + if (unlikely (rc == -1) { + if (errno == EINTR || errno == EBADF) + return -1; + errno_assert (false); + } #endif break; } diff --git a/tests/test_shutdown_stress.cpp b/tests/test_shutdown_stress.cpp index dccf91f..c6561a0 100644 --- a/tests/test_shutdown_stress.cpp +++ b/tests/test_shutdown_stress.cpp @@ -23,7 +23,7 @@ #include #include -#define THREAD_COUNT 10 +#define THREAD_COUNT 100 extern "C" { diff --git a/zeromq.spec b/zeromq.spec index 4d6a634..e99deaf 100644 --- a/zeromq.spec +++ b/zeromq.spec @@ -1,5 +1,5 @@ Name: zeromq -Version: 2.1.7 +Version: 2.1.9 Release: 1%{?dist} Summary: The ZeroMQ messaging library Group: Applications/Internet -- cgit v1.2.3