mirror of
https://github.com/zeromq/libzmq.git
synced 2025-11-07 22:40:55 +01:00
Merge branch 'master' of git@github.com:sustrik/zeromq2
This commit is contained in:
2
AUTHORS
2
AUTHORS
@@ -4,6 +4,7 @@ Contributors
|
||||
Alexej Lotz
|
||||
Asko Kauppi
|
||||
Barak Amar
|
||||
Chris Wong
|
||||
Conrad D. Steenberg
|
||||
Dhruva Krishnamurthy
|
||||
Dirk O. Kaar
|
||||
@@ -18,6 +19,7 @@ Martin Hurton
|
||||
Martin Lucina
|
||||
Martin Sustrik
|
||||
Matus Hamorsky
|
||||
McClain Looney
|
||||
Pavel Gushcha
|
||||
Pavol Malosek
|
||||
Steven McCoy
|
||||
|
||||
@@ -164,3 +164,18 @@ apply, that proxy's public statement of acceptance of any version is
|
||||
permanent authorization for you to choose that version for the
|
||||
Library.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
SPECIAL EXCEPTION GRANTED BY IMATIX
|
||||
|
||||
As a special exception, iMatix gives you permission to link this library with
|
||||
independent modules to produce an executable, regardless of the license terms
|
||||
of these independent modules, and to copy and distribute the resulting
|
||||
executable under terms of your choice, provided that you also meet, for each
|
||||
linked independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from or based on
|
||||
this library. If you modify this library, you must extend this exception to your
|
||||
version of the library.
|
||||
|
||||
|
||||
@@ -14,6 +14,6 @@ $(top_srcdir)/foreign/xmlParser/xmlParser.hpp
|
||||
|
||||
dist-hook:
|
||||
-rm -rf $(distdir)/foreign/openpgm/@pgm_basename@
|
||||
clean-local:
|
||||
distclean-local:
|
||||
-rm -rf $(top_srcdir)/foreign/openpgm/@pgm_basename@
|
||||
|
||||
|
||||
@@ -18,7 +18,11 @@
|
||||
|
||||
require 'mkmf'
|
||||
dir_config('libzmq')
|
||||
have_library('libzmq')
|
||||
create_makefile("ruby")
|
||||
if have_library('libzmq', 'zmq_init')
|
||||
puts "Cool, I found your zmq install..."
|
||||
create_makefile("zmq")
|
||||
else
|
||||
raise "Couldn't find zmq library. try setting --with-zmq-dir=<path> to tell me where it is."
|
||||
end
|
||||
|
||||
|
||||
|
||||
@@ -69,8 +69,8 @@ static VALUE socket_initialize (VALUE self_, VALUE context_, VALUE type_)
|
||||
{
|
||||
assert (!DATA_PTR (self_));
|
||||
|
||||
if (strcmp (rb_obj_classname (context_), "Context") != 0) {
|
||||
rb_raise (rb_eArgError, "expected Context object");
|
||||
if (strcmp (rb_obj_classname (context_), "ZMQ::Context") != 0) {
|
||||
rb_raise (rb_eArgError, "expected ZMQ::Context object");
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
@@ -234,12 +234,15 @@ static VALUE socket_recv (VALUE self_, VALUE flags_)
|
||||
|
||||
extern "C" void Init_librbzmq ()
|
||||
{
|
||||
VALUE context_type = rb_define_class ("Context", rb_cObject);
|
||||
VALUE zmq_module = rb_define_module ("ZMQ");
|
||||
VALUE context_type = rb_define_class_under (zmq_module, "Context",
|
||||
rb_cObject);
|
||||
rb_define_alloc_func (context_type, context_alloc);
|
||||
rb_define_method (context_type, "initialize",
|
||||
(VALUE(*)(...)) context_initialize, 3);
|
||||
|
||||
VALUE socket_type = rb_define_class ("Socket", rb_cObject);
|
||||
VALUE socket_type = rb_define_class_under (zmq_module, "Socket",
|
||||
rb_cObject);
|
||||
rb_define_alloc_func (socket_type, socket_alloc);
|
||||
rb_define_method (socket_type, "initialize",
|
||||
(VALUE(*)(...)) socket_initialize, 2);
|
||||
@@ -256,31 +259,31 @@ extern "C" void Init_librbzmq ()
|
||||
rb_define_method (socket_type, "recv",
|
||||
(VALUE(*)(...)) socket_recv, 1);
|
||||
|
||||
rb_define_global_const ("HWM", INT2NUM (ZMQ_HWM));
|
||||
rb_define_global_const ("LWM", INT2NUM (ZMQ_LWM));
|
||||
rb_define_global_const ("SWAP", INT2NUM (ZMQ_SWAP));
|
||||
rb_define_global_const ("AFFINITY", INT2NUM (ZMQ_AFFINITY));
|
||||
rb_define_global_const ("IDENTITY", INT2NUM (ZMQ_IDENTITY));
|
||||
rb_define_global_const ("SUBSCRIBE", INT2NUM (ZMQ_SUBSCRIBE));
|
||||
rb_define_global_const ("UNSUBSCRIBE", INT2NUM (ZMQ_UNSUBSCRIBE));
|
||||
rb_define_global_const ("RATE", INT2NUM (ZMQ_RATE));
|
||||
rb_define_global_const ("RECOVERY_IVL", INT2NUM (ZMQ_RECOVERY_IVL));
|
||||
rb_define_global_const ("MCAST_LOOP", INT2NUM (ZMQ_MCAST_LOOP));
|
||||
rb_define_global_const ("SNDBUF", INT2NUM (ZMQ_SNDBUF));
|
||||
rb_define_global_const ("RCVBUF", INT2NUM (ZMQ_RCVBUF));
|
||||
rb_define_const (zmq_module, "HWM", INT2NUM (ZMQ_HWM));
|
||||
rb_define_const (zmq_module, "LWM", INT2NUM (ZMQ_LWM));
|
||||
rb_define_const (zmq_module, "SWAP", INT2NUM (ZMQ_SWAP));
|
||||
rb_define_const (zmq_module, "AFFINITY", INT2NUM (ZMQ_AFFINITY));
|
||||
rb_define_const (zmq_module, "IDENTITY", INT2NUM (ZMQ_IDENTITY));
|
||||
rb_define_const (zmq_module, "SUBSCRIBE", INT2NUM (ZMQ_SUBSCRIBE));
|
||||
rb_define_const (zmq_module, "UNSUBSCRIBE", INT2NUM (ZMQ_UNSUBSCRIBE));
|
||||
rb_define_const (zmq_module, "RATE", INT2NUM (ZMQ_RATE));
|
||||
rb_define_const (zmq_module, "RECOVERY_IVL", INT2NUM (ZMQ_RECOVERY_IVL));
|
||||
rb_define_const (zmq_module, "MCAST_LOOP", INT2NUM (ZMQ_MCAST_LOOP));
|
||||
rb_define_const (zmq_module, "SNDBUF", INT2NUM (ZMQ_SNDBUF));
|
||||
rb_define_const (zmq_module, "RCVBUF", INT2NUM (ZMQ_RCVBUF));
|
||||
|
||||
rb_define_global_const ("NOBLOCK", INT2NUM (ZMQ_NOBLOCK));
|
||||
rb_define_global_const ("NOFLUSH", INT2NUM (ZMQ_NOFLUSH));
|
||||
rb_define_const (zmq_module, "NOBLOCK", INT2NUM (ZMQ_NOBLOCK));
|
||||
rb_define_const (zmq_module, "NOFLUSH", INT2NUM (ZMQ_NOFLUSH));
|
||||
|
||||
rb_define_global_const ("P2P", INT2NUM (ZMQ_P2P));
|
||||
rb_define_global_const ("SUB", INT2NUM (ZMQ_SUB));
|
||||
rb_define_global_const ("PUB", INT2NUM (ZMQ_PUB));
|
||||
rb_define_global_const ("REQ", INT2NUM (ZMQ_REQ));
|
||||
rb_define_global_const ("REP", INT2NUM (ZMQ_REP));
|
||||
rb_define_global_const ("XREQ", INT2NUM (ZMQ_XREQ));
|
||||
rb_define_global_const ("XREP", INT2NUM (ZMQ_XREP));
|
||||
rb_define_global_const ("UPSTREAM", INT2NUM (ZMQ_UPSTREAM));
|
||||
rb_define_global_const ("DOWNSTREAM", INT2NUM (ZMQ_DOWNSTREAM));
|
||||
rb_define_const (zmq_module, "P2P", INT2NUM (ZMQ_P2P));
|
||||
rb_define_const (zmq_module, "SUB", INT2NUM (ZMQ_SUB));
|
||||
rb_define_const (zmq_module, "PUB", INT2NUM (ZMQ_PUB));
|
||||
rb_define_const (zmq_module, "REQ", INT2NUM (ZMQ_REQ));
|
||||
rb_define_const (zmq_module, "REP", INT2NUM (ZMQ_REP));
|
||||
rb_define_const (zmq_module, "XREQ", INT2NUM (ZMQ_XREQ));
|
||||
rb_define_const (zmq_module, "XREP", INT2NUM (ZMQ_XREP));
|
||||
rb_define_const (zmq_module, "UPSTREAM", INT2NUM (ZMQ_UPSTREAM));
|
||||
rb_define_const (zmq_module, "DOWNSTREAM", INT2NUM (ZMQ_DOWNSTREAM));
|
||||
|
||||
rb_define_global_const ("POLL", INT2NUM (ZMQ_POLL));
|
||||
rb_define_const (zmq_module, "POLL", INT2NUM (ZMQ_POLL));
|
||||
}
|
||||
|
||||
@@ -25,6 +25,11 @@
|
||||
// zmq directory to take place of platform.hpp generated from
|
||||
// platform.hpp.in on platforms supported by GNU autotools.
|
||||
|
||||
// 0MQ version information
|
||||
#define PACKAGE_VERSION_MAJOR 2
|
||||
#define PACKAGE_VERSION_MINOR 0
|
||||
#define PACKAGE_VERSION_PATCH 6
|
||||
|
||||
#define ZMQ_HAVE_WINDOWS
|
||||
#define _WINSOCKAPI_
|
||||
#define NOMINMAX
|
||||
|
||||
69
configure.in
69
configure.in
@@ -55,8 +55,14 @@ AC_PROG_SED
|
||||
AC_PROG_AWK
|
||||
|
||||
# Checks for libraries.
|
||||
AC_CHECK_LIB(pthread, pthread_create)
|
||||
AC_CHECK_LIB(stdc++, malloc)
|
||||
AC_CHECK_LIB([pthread], [pthread_create])
|
||||
# If using GNU C++, libstdc++ must be available.
|
||||
if test "x$GXX" = "xyes"; then
|
||||
# libstdc++ depends on libm on some platforms
|
||||
AC_CHECK_LIB([m], [main])
|
||||
AC_CHECK_LIB([stdc++], [main], ,
|
||||
[AC_MSG_ERROR([cannot link with -lstdc++])])
|
||||
fi
|
||||
|
||||
# Extra CXXFLAGS are appended at the end of CXXFLAGS for libzmq.
|
||||
LIBZMQ_EXTRA_CXXFLAGS=""
|
||||
@@ -77,9 +83,9 @@ on_mingw32="no"
|
||||
AC_CANONICAL_HOST
|
||||
|
||||
# Determine whether or not documentation should be built.
|
||||
build_doc="yes"
|
||||
build_doc="no"
|
||||
install_man="yes"
|
||||
if test ! -f "doc/zmq.html"; then
|
||||
if test -d ".git"; then
|
||||
# We are building from git.
|
||||
# Check for asciidoc and xmlto and don't build the docs if these are not installed.
|
||||
AC_CHECK_PROG(have_asciidoc, asciidoc, yes, no)
|
||||
@@ -88,25 +94,40 @@ if test ! -f "doc/zmq.html"; then
|
||||
build_doc="no"
|
||||
install_man="no"
|
||||
AC_MSG_WARN([You are building from git and asciidoc is not installed. Documentation will not be built or installed.])
|
||||
else
|
||||
build_doc="yes"
|
||||
fi
|
||||
fi
|
||||
AC_MSG_CHECKING([whether to build documentation])
|
||||
AC_MSG_RESULT([$build_doc])
|
||||
AC_MSG_CHECKING([whether to install manpages])
|
||||
if test ! -f "./doc/zmq.7"; then
|
||||
AC_MSG_ERROR([configure thinks we want to install manpages but they're not present. Help!])
|
||||
fi
|
||||
AC_MSG_RESULT([$install_man])
|
||||
|
||||
# Set some default features required by 0MQ code.
|
||||
CPPFLAGS="-D_REENTRANT -D_THREAD_SAFE $CPPFLAGS"
|
||||
|
||||
# OS-specific tests
|
||||
case "${host_os}" in
|
||||
*linux*)
|
||||
# Define on Linux to enable all library features
|
||||
CPPFLAGS="-D_GNU_SOURCE $CPPFLAGS"
|
||||
AC_DEFINE(ZMQ_HAVE_LINUX, 1, [Have Linux OS])
|
||||
CPPFLAGS="-D_REENTRANT $CPPFLAGS"
|
||||
AC_CHECK_LIB(uuid, main, ,
|
||||
[AC_MSG_ERROR([cannot link with -luuid, install uuid-dev.])])
|
||||
;;
|
||||
*solaris*)
|
||||
# Define on Solaris to enable all library features
|
||||
CPPFLAGS="-D_POSIX_C_SOURCE=200112L -D_PTHREADS $CPPFLAGS"
|
||||
AC_DEFINE(ZMQ_HAVE_SOLARIS, 1, [Have Solaris OS])
|
||||
AC_CHECK_LIB(socket, main)
|
||||
AC_CHECK_LIB(nsl, main)
|
||||
AC_CHECK_LIB(rt, main)
|
||||
AC_CHECK_LIB(uuid, main, ,
|
||||
[AC_MSG_ERROR([cannot link with -luuid, install uuid-dev.])])
|
||||
CPPFLAGS="-D_REENTRANT -D_PTHREADS $CPPFLAGS"
|
||||
AC_MSG_CHECKING([wheter atomic operations can be used])
|
||||
AC_MSG_CHECKING([whether atomic operations can be used])
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
|
||||
[[#include <atomic.h>]],
|
||||
[[uint32_t value;
|
||||
@@ -121,39 +142,48 @@ case "${host_os}" in
|
||||
fi
|
||||
;;
|
||||
*freebsd*)
|
||||
# Define on FreeBSD to enable all library features
|
||||
CPPFLAGS="-D__BSD_VISIBLE $CPPFLAGS"
|
||||
AC_DEFINE(ZMQ_HAVE_FREEBSD, 1, [Have FreeBSD OS])
|
||||
CPPFLAGS="-D_THREAD_SAFE $CPPFLAGS"
|
||||
LIBS="-pthread"
|
||||
;;
|
||||
*darwin*)
|
||||
# Define on Darwin to enable all library features
|
||||
CPPFLAGS="-D_DARWIN_C_SOURCE $CPPFLAGS"
|
||||
pedantic="no"
|
||||
werror="no"
|
||||
AC_DEFINE(ZMQ_HAVE_OSX, 1, [Have DarwinOSX OS])
|
||||
LIBS="-pthread"
|
||||
LIBZMQ_EXTRA_CXXFLAGS+="-Wno-uninitialized"
|
||||
;;
|
||||
*netbsd*)
|
||||
# Define on NetBSD to enable all library features
|
||||
CPPFLAGS="-D_NETBSD_SOURCE $CPPFLAGS"
|
||||
AC_DEFINE(ZMQ_HAVE_NETBSD, 1, [Have NetBSD OS])
|
||||
# NetBSD 5.0 and newer provides atomic operations
|
||||
netbsd_has_atomic=no
|
||||
# XXX As of 5.0.1 the functions declared in atomic.h are
|
||||
# missing "extern C", disable this until upstream fixes it.
|
||||
# AC_CHECK_HEADERS(atomic.h, [netbsd_has_atomic=yes])
|
||||
if test "x$netbsd_has_atomic" = "xno"; then
|
||||
AC_DEFINE(ZMQ_FORCE_MUTEXES, 1, [Force to use mutexes])
|
||||
fi
|
||||
;;
|
||||
*openbsd*)
|
||||
# Define on OpenBSD to enable all library features
|
||||
CPPFLAGS="-D_BSD_SOURCE $CPPFLAGS"
|
||||
AC_DEFINE(ZMQ_HAVE_OPENBSD, 1, [Have OpenBSD OS])
|
||||
CPPFLAGS="-pthread $CPPFLAGS"
|
||||
LIBS="-pthread"
|
||||
;;
|
||||
*nto-qnx*)
|
||||
pedantic="no"
|
||||
AC_DEFINE(ZMQ_HAVE_QNXNTO, 1, [Have QNX Neutrino OS])
|
||||
CPPFLAGS="-D_THREAD_SAFE $CPPFLAGS"
|
||||
AC_CHECK_LIB(socket,main)
|
||||
;;
|
||||
*aix*)
|
||||
AC_DEFINE(ZMQ_HAVE_AIX, 1, [Have AIX OS])
|
||||
if test "x$GXX" = "xyes"; then
|
||||
CPPFLAGS="-D_THREAD_SAFE $CPPFLAGS"
|
||||
fi
|
||||
;;
|
||||
*hpux*)
|
||||
# Define on HP-UX to enable all library features
|
||||
CPPFLAGS="-D_POSIX_C_SOURCE=200112L"
|
||||
AC_DEFINE(ZMQ_HAVE_HPUX, 1, [Have HPUX OS])
|
||||
if test "x$GXX" = "xyes"; then
|
||||
CPPFLAGS="-D_THREAD_SAFE $CPPFLAGS"
|
||||
fi
|
||||
AC_CHECK_LIB(rt, main)
|
||||
;;
|
||||
*mingw32*)
|
||||
@@ -634,7 +664,6 @@ AC_MSG_RESULT([ Queue: $queue])
|
||||
AC_MSG_RESULT([ Performance tests: $perf])
|
||||
AC_MSG_RESULT([ Examples:])
|
||||
AC_MSG_RESULT([ Chat: $chat])
|
||||
AC_MSG_RESULT([ Documentation: $build_doc])
|
||||
AC_MSG_RESULT([])
|
||||
AC_MSG_RESULT([ ******************************************************** ])
|
||||
AC_MSG_RESULT([])
|
||||
|
||||
@@ -26,6 +26,7 @@ MAINTAINERCLEANFILES = $(MAN_DOC) $(MAN_HTML)
|
||||
|
||||
dist-hook : $(MAN_DOC) $(MAN_HTML)
|
||||
|
||||
if BUILD_DOC
|
||||
SUFFIXES=.html .txt .xml .1 .3 .7
|
||||
|
||||
.txt.html:
|
||||
@@ -40,4 +41,4 @@ SUFFIXES=.html .txt .xml .1 .3 .7
|
||||
xmlto man $<
|
||||
.xml.7:
|
||||
xmlto man $<
|
||||
|
||||
endif
|
||||
|
||||
@@ -27,8 +27,8 @@ bind_to = ARGV[0]
|
||||
message_size = ARGV[1].to_i
|
||||
roundtrip_count = ARGV[2].to_i
|
||||
|
||||
ctx = Context.new(1, 1, 0)
|
||||
s = Socket.new(ctx, REP);
|
||||
ctx = ZMQ::Context.new(1, 1, 0)
|
||||
s = ZMQ::Socket.new(ctx, ZMQ::REP);
|
||||
s.bind(bind_to);
|
||||
|
||||
for i in 0...roundtrip_count do
|
||||
|
||||
@@ -27,9 +27,9 @@ bind_to = ARGV[0]
|
||||
message_size = ARGV[1].to_i
|
||||
message_count = ARGV[2].to_i
|
||||
|
||||
ctx = Context.new(1, 1, 0)
|
||||
s = Socket.new(ctx, SUB);
|
||||
s.setsockopt(SUBSCRIBE, "");
|
||||
ctx = ZMQ::Context.new(1, 1, 0)
|
||||
s = ZMQ::Socket.new(ctx, ZMQ::SUB);
|
||||
s.setsockopt(ZMQ::SUBSCRIBE, "");
|
||||
|
||||
# Add your socket options here.
|
||||
# For example ZMQ_RATE, ZMQ_RECOVERY_IVL and ZMQ_MCAST_LOOP for PGM.
|
||||
|
||||
@@ -27,8 +27,8 @@ connect_to = ARGV[0]
|
||||
message_size = ARGV[1].to_i
|
||||
roundtrip_count = ARGV[2].to_i
|
||||
|
||||
ctx = Context.new(1, 1, 0)
|
||||
s = Socket.new(ctx, REQ);
|
||||
ctx = ZMQ::Context.new(1, 1, 0)
|
||||
s = ZMQ::Socket.new(ctx, ZMQ::REQ);
|
||||
s.connect(connect_to);
|
||||
|
||||
msg = "#{'0'*message_size}"
|
||||
|
||||
@@ -27,8 +27,8 @@ connect_to = ARGV[0]
|
||||
message_size = ARGV[1].to_i
|
||||
message_count = ARGV[2].to_i
|
||||
|
||||
ctx = Context.new(1, 1, 0)
|
||||
s = Socket.new(ctx, PUB);
|
||||
ctx = ZMQ::Context.new(1, 1, 0)
|
||||
s = ZMQ::Socket.new(ctx, ZMQ::PUB);
|
||||
|
||||
# Add your socket options here.
|
||||
# For example ZMQ_RATE, ZMQ_RECOVERY_IVL and ZMQ_MCAST_LOOP for PGM.
|
||||
|
||||
@@ -34,8 +34,8 @@
|
||||
#define ZMQ_ATOMIC_BITMAP_SPARC
|
||||
#elif defined ZMQ_HAVE_WINDOWS
|
||||
#define ZMQ_ATOMIC_BITMAP_WINDOWS
|
||||
#elif defined ZMQ_HAVE_SOLARIS
|
||||
#define ZMQ_ATOMIC_BITMAP_SOLARIS
|
||||
#elif (defined ZMQ_HAVE_SOLARIS || defined ZMQ_HAVE_NETBSD)
|
||||
#define ZMQ_ATOMIC_BITMAP_SYSTEM
|
||||
#else
|
||||
#define ZMQ_ATOMIC_BITMAP_MUTEX
|
||||
#endif
|
||||
@@ -44,7 +44,7 @@
|
||||
#include "mutex.hpp"
|
||||
#elif defined ZMQ_ATOMIC_BITMAP_WINDOWS
|
||||
#include "windows.hpp"
|
||||
#elif defined ZMQ_ATOMIC_BITMAP_SOLARIS
|
||||
#elif defined ZMQ_ATOMIC_BITMAP_SYSTEM
|
||||
#include <atomic.h>
|
||||
#endif
|
||||
|
||||
@@ -89,7 +89,7 @@ namespace zmq
|
||||
return (oldval & (bitmap_t (1) << reset_index_)) ?
|
||||
true : false;
|
||||
}
|
||||
#elif defined ZMQ_ATOMIC_BITMAP_SOLARIS
|
||||
#elif defined ZMQ_ATOMIC_BITMAP_SYSTEM
|
||||
while (true) {
|
||||
bitmap_t oldval = value;
|
||||
bitmap_t newval = (oldval | (bitmap_t (1) << set_index_)) &
|
||||
@@ -150,7 +150,7 @@ namespace zmq
|
||||
bitmap_t oldval;
|
||||
#if defined ZMQ_ATOMIC_BITMAP_WINDOWS
|
||||
oldval = InterlockedExchange ((volatile LONG*) &value, newval_);
|
||||
#elif defined ZMQ_ATOMIC_BITMAP_SOLARIS
|
||||
#elif defined ZMQ_ATOMIC_BITMAP_SYSTEM
|
||||
oldval = atomic_swap_32 (&value, newval_);
|
||||
#elif defined ZMQ_ATOMIC_BITMAP_X86
|
||||
oldval = newval_;
|
||||
@@ -201,7 +201,7 @@ namespace zmq
|
||||
newval, oldval) == (LONG) oldval)
|
||||
return oldval;
|
||||
}
|
||||
#elif defined ZMQ_ATOMIC_BITMAP_SOLARIS
|
||||
#elif defined ZMQ_ATOMIC_BITMAP_SYSTEM
|
||||
while (true) {
|
||||
bitmap_t oldval = value;
|
||||
bitmap_t newval = oldval == 0 ? thenval_ : elseval_;
|
||||
@@ -270,8 +270,8 @@ namespace zmq
|
||||
#if defined ZMQ_ATOMIC_BITMAP_WINDOWS
|
||||
#undef ZMQ_ATOMIC_BITMAP_WINDOWS
|
||||
#endif
|
||||
#if defined ZMQ_ATOMIC_BITMAP_SOLARIS
|
||||
#undef ZMQ_ATOMIC_BITMAP_SOLARIS
|
||||
#if defined ZMQ_ATOMIC_BITMAP_SYSTEM
|
||||
#undef ZMQ_ATOMIC_BITMAP_SYSTEM
|
||||
#endif
|
||||
#if defined ZMQ_ATOMIC_BITMAP_X86
|
||||
#undef ZMQ_ATOMIC_BITMAP_X86
|
||||
|
||||
@@ -31,8 +31,8 @@
|
||||
#define ZMQ_ATOMIC_COUNTER_SPARC
|
||||
#elif defined ZMQ_HAVE_WINDOWS
|
||||
#define ZMQ_ATOMIC_COUNTER_WINDOWS
|
||||
#elif defined ZMQ_HAVE_SOLARIS
|
||||
#define ZMQ_ATOMIC_COUNTER_SOLARIS
|
||||
#elif (defined ZMQ_HAVE_SOLARIS || defined ZMQ_HAVE_NETBSD)
|
||||
#define ZMQ_ATOMIC_COUNTER_SYSTEM
|
||||
#else
|
||||
#define ZMQ_ATOMIC_COUNTER_MUTEX
|
||||
#endif
|
||||
@@ -41,7 +41,7 @@
|
||||
#include "mutex.hpp"
|
||||
#elif defined ZMQ_ATOMIC_COUNTER_WINDOWS
|
||||
#include "windows.hpp"
|
||||
#elif defined ZMQ_ATOMIC_COUNTER_SOLARIS
|
||||
#elif defined ZMQ_ATOMIC_COUNTER_SYSTEM
|
||||
#include <atomic.h>
|
||||
#endif
|
||||
|
||||
@@ -79,7 +79,7 @@ namespace zmq
|
||||
|
||||
#if defined ZMQ_ATOMIC_COUNTER_WINDOWS
|
||||
old_value = InterlockedExchangeAdd ((LONG*) &value, increment_);
|
||||
#elif defined ZMQ_ATOMIC_COUNTER_SOLARIS
|
||||
#elif defined ZMQ_ATOMIC_COUNTER_SYSTEM
|
||||
integer_t new_value = atomic_add_32_nv (&value, increment_);
|
||||
old_value = new_value - increment_;
|
||||
#elif defined ZMQ_ATOMIC_COUNTER_X86
|
||||
@@ -119,7 +119,7 @@ namespace zmq
|
||||
LONG delta = - ((LONG) decrement);
|
||||
integer_t old = InterlockedExchangeAdd ((LONG*) &value, delta);
|
||||
return old - decrement != 0;
|
||||
#elif defined ZMQ_ATOMIC_COUNTER_SOLARIS
|
||||
#elif defined ZMQ_ATOMIC_COUNTER_SYSTEM
|
||||
int32_t delta = - ((int32_t) decrement);
|
||||
integer_t nv = atomic_add_32_nv (&value, delta);
|
||||
return nv != 0;
|
||||
@@ -180,8 +180,8 @@ namespace zmq
|
||||
#if defined ZMQ_ATOMIC_COUNTER_WINDOWS
|
||||
#undef ZMQ_ATOMIC_COUNTER_WINDOWS
|
||||
#endif
|
||||
#if defined ZMQ_ATOMIC_COUNTER_SOLARIS
|
||||
#undef ZMQ_ATOMIC_COUNTER_SOLARIS
|
||||
#if defined ZMQ_ATOMIC_COUNTER_SYSTEM
|
||||
#undef ZMQ_ATOMIC_COUNTER_SYSTEM
|
||||
#endif
|
||||
#if defined ZMQ_ATOMIC_COUNTER_X86
|
||||
#undef ZMQ_ATOMIC_COUNTER_X86
|
||||
|
||||
@@ -31,8 +31,8 @@
|
||||
#define ZMQ_ATOMIC_PTR_SPARC
|
||||
#elif defined ZMQ_HAVE_WINDOWS
|
||||
#define ZMQ_ATOMIC_PTR_WINDOWS
|
||||
#elif defined ZMQ_HAVE_SOLARIS
|
||||
#define ZMQ_ATOMIC_PTR_SOLARIS
|
||||
#elif (defined ZMQ_HAVE_SOLARIS || defined ZMQ_HAVE_NETBSD)
|
||||
#define ZMQ_ATOMIC_PTR_SYSTEM
|
||||
#else
|
||||
#define ZMQ_ATOMIC_PTR_MUTEX
|
||||
#endif
|
||||
@@ -41,7 +41,7 @@
|
||||
#include "mutex.hpp"
|
||||
#elif defined ZMQ_ATOMIC_PTR_WINDOWS
|
||||
#include "windows.hpp"
|
||||
#elif defined ZMQ_ATOMIC_PTR_SOLARIS
|
||||
#elif defined ZMQ_ATOMIC_PTR_SYSTEM
|
||||
#include <atomic.h>
|
||||
#endif
|
||||
|
||||
@@ -79,7 +79,7 @@ namespace zmq
|
||||
{
|
||||
#if defined ZMQ_ATOMIC_PTR_WINDOWS
|
||||
return (T*) InterlockedExchangePointer (&ptr, val_);
|
||||
#elif defined ZMQ_ATOMIC_PTR_SOLARIS
|
||||
#elif defined ZMQ_ATOMIC_PTR_SYSTEM
|
||||
return (T*) atomic_swap_ptr (&ptr, val_);
|
||||
#elif defined ZMQ_ATOMIC_PTR_X86
|
||||
T *old;
|
||||
@@ -125,7 +125,7 @@ namespace zmq
|
||||
#if defined ZMQ_ATOMIC_PTR_WINDOWS
|
||||
return (T*) InterlockedCompareExchangePointer (
|
||||
(volatile PVOID*) &ptr, val_, cmp_);
|
||||
#elif defined ZMQ_ATOMIC_PTR_SOLARIS
|
||||
#elif defined ZMQ_ATOMIC_PTR_SYSTEM
|
||||
return (T*) atomic_cas_ptr (&ptr, cmp_, val_);
|
||||
#elif defined ZMQ_ATOMIC_PTR_X86
|
||||
T *old;
|
||||
@@ -173,8 +173,8 @@ namespace zmq
|
||||
#if defined ZMQ_ATOMIC_PTR_WINDOWS
|
||||
#undef ZMQ_ATOMIC_PTR_WINDOWS
|
||||
#endif
|
||||
#if defined ZMQ_ATOMIC_PTR_SOLARIS
|
||||
#undef ZMQ_ATOMIC_PTR_SOLARIS
|
||||
#if defined ZMQ_ATOMIC_PTR_SYSTEM
|
||||
#undef ZMQ_ATOMIC_PTR_SYSTEM
|
||||
#endif
|
||||
#if defined ZMQ_ATOMIC_PTR_X86
|
||||
#undef ZMQ_ATOMIC_PTR_X86
|
||||
|
||||
11
src/ip.cpp
11
src/ip.cpp
@@ -125,7 +125,8 @@ static int resolve_nic_name (in_addr* addr_, char const *interface_)
|
||||
|
||||
#elif ((defined ZMQ_HAVE_LINUX || defined ZMQ_HAVE_FREEBSD ||\
|
||||
defined ZMQ_HAVE_OSX || defined ZMQ_HAVE_OPENBSD ||\
|
||||
defined ZMQ_HAVE_QNXNTO) && defined ZMQ_HAVE_IFADDRS)
|
||||
defined ZMQ_HAVE_QNXNTO || defined ZMQ_HAVE_NETBSD)\
|
||||
&& defined ZMQ_HAVE_IFADDRS)
|
||||
|
||||
#include <ifaddrs.h>
|
||||
|
||||
@@ -239,11 +240,7 @@ int zmq::resolve_ip_interface (sockaddr_storage* addr_, socklen_t *addr_len_,
|
||||
|
||||
// Restrict hostname/service to literals to avoid any DNS lookups or
|
||||
// service-name irregularity due to indeterminate socktype.
|
||||
#if defined ZMQ_HAVE_OSX
|
||||
req.ai_flags = AI_PASSIVE | AI_NUMERICHOST;
|
||||
#else
|
||||
req.ai_flags = AI_PASSIVE | AI_NUMERICHOST | AI_NUMERICSERV;
|
||||
#endif
|
||||
|
||||
// Resolve the literal address. Some of the error info is lost in case
|
||||
// of error, however, there's no way to report EAI errors via errno.
|
||||
@@ -292,11 +289,7 @@ int zmq::resolve_ip_hostname (sockaddr_storage *addr_, socklen_t *addr_len_,
|
||||
|
||||
// Avoid named services due to unclear socktype, and don't pick IPv6
|
||||
// addresses if we don't have a local IPv6 address configured.
|
||||
#if defined ZMQ_HAVE_OSX
|
||||
req.ai_flags = AI_ADDRCONFIG;
|
||||
#else
|
||||
req.ai_flags = AI_NUMERICSERV | AI_ADDRCONFIG;
|
||||
#endif
|
||||
|
||||
// Resolve host name. Some of the error info is lost in case of error,
|
||||
// however, there's no way to report EAI errors via errno.
|
||||
|
||||
10
src/ip.hpp
10
src/ip.hpp
@@ -30,6 +30,16 @@
|
||||
#include <arpa/inet.h>
|
||||
#include <netinet/in.h>
|
||||
#include <netdb.h>
|
||||
|
||||
// Some platforms (notably Darwin/OSX and NetBSD) do not define all AI_
|
||||
// flags for getaddrinfo(). This can be worked around safely by defining
|
||||
// these to 0.
|
||||
#ifndef AI_ADDRCONFIG
|
||||
#define AI_ADDRCONFIG 0
|
||||
#endif
|
||||
#ifndef AI_NUMERICSERV
|
||||
#define AI_NUMERICSERV 0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if !defined ZMQ_HAVE_WINDOWS && !defined ZMQ_HAVE_OPENVMS
|
||||
|
||||
@@ -19,7 +19,8 @@
|
||||
|
||||
#include "platform.hpp"
|
||||
|
||||
#if defined ZMQ_HAVE_FREEBSD || defined ZMQ_HAVE_OPENBSD || defined ZMQ_HAVE_OSX
|
||||
#if defined ZMQ_HAVE_FREEBSD || defined ZMQ_HAVE_OPENBSD ||\
|
||||
defined ZMQ_HAVE_OSX || defined ZMQ_HAVE_NETBSD
|
||||
|
||||
#include <sys/time.h>
|
||||
#include <sys/types.h>
|
||||
@@ -34,6 +35,14 @@
|
||||
#include "config.hpp"
|
||||
#include "i_poll_events.hpp"
|
||||
|
||||
// NetBSD defines (struct kevent).udata as intptr_t, everyone else
|
||||
// as void *.
|
||||
#if defined ZMQ_HAVE_NETBSD
|
||||
#define kevent_udata_t intptr_t
|
||||
#else
|
||||
#define kevent_udata_t void *
|
||||
#endif
|
||||
|
||||
zmq::kqueue_t::kqueue_t () :
|
||||
stopping (false)
|
||||
{
|
||||
@@ -56,7 +65,7 @@ void zmq::kqueue_t::kevent_add (fd_t fd_, short filter_, void *udata_)
|
||||
{
|
||||
struct kevent ev;
|
||||
|
||||
EV_SET (&ev, fd_, filter_, EV_ADD, 0, 0, udata_);
|
||||
EV_SET (&ev, fd_, filter_, EV_ADD, 0, 0, (kevent_udata_t)udata_);
|
||||
int rc = kevent (kqueue_fd, &ev, 1, NULL, 0, NULL);
|
||||
errno_assert (rc != -1);
|
||||
}
|
||||
@@ -65,7 +74,7 @@ void zmq::kqueue_t::kevent_delete (fd_t fd_, short filter_)
|
||||
{
|
||||
struct kevent ev;
|
||||
|
||||
EV_SET (&ev, fd_, filter_, EV_DELETE, 0, 0, NULL);
|
||||
EV_SET (&ev, fd_, filter_, EV_DELETE, 0, 0, (kevent_udata_t)NULL);
|
||||
int rc = kevent (kqueue_fd, &ev, 1, NULL, 0, NULL);
|
||||
errno_assert (rc != -1);
|
||||
}
|
||||
@@ -212,4 +221,6 @@ void zmq::kqueue_t::worker_routine (void *arg_)
|
||||
((kqueue_t*) arg_)->loop ();
|
||||
}
|
||||
|
||||
// Don't pollute namespace with defines local to this file
|
||||
#undef kevent_udata_t
|
||||
#endif
|
||||
|
||||
@@ -22,7 +22,8 @@
|
||||
|
||||
#include "platform.hpp"
|
||||
|
||||
#if defined ZMQ_HAVE_FREEBSD || defined ZMQ_HAVE_OPENBSD || defined ZMQ_HAVE_OSX
|
||||
#if defined ZMQ_HAVE_FREEBSD || defined ZMQ_HAVE_OPENBSD ||\
|
||||
defined ZMQ_HAVE_OSX || defined ZMQ_HAVE_NETBSD
|
||||
|
||||
#include <vector>
|
||||
|
||||
|
||||
@@ -22,7 +22,8 @@
|
||||
#if 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_HPUX || defined ZMQ_HAVE_AIX ||\
|
||||
defined ZMQ_HAVE_NETBSD
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
@@ -25,7 +25,8 @@
|
||||
#if 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_HPUX || defined ZMQ_HAVE_AIX ||\
|
||||
defined ZMQ_HAVE_NETBSD
|
||||
|
||||
#include <poll.h>
|
||||
#include <stddef.h>
|
||||
|
||||
@@ -47,6 +47,8 @@ namespace zmq
|
||||
typedef kqueue_t poller_t;
|
||||
#elif defined ZMQ_HAVE_OPENBSD
|
||||
typedef kqueue_t poller_t;
|
||||
#elif defined ZMQ_HAVE_NETBSD
|
||||
typedef kqueue_t poller_t;
|
||||
#elif defined ZMQ_HAVE_SOLARIS
|
||||
typedef devpoll_t poller_t;
|
||||
#elif defined ZMQ_HAVE_OSX
|
||||
|
||||
18
src/rep.cpp
18
src/rep.cpp
@@ -89,11 +89,11 @@ void zmq::rep_t::xdetach_outpipe (class writer_t *pipe_)
|
||||
|
||||
out_pipes_t::size_type index = out_pipes.index (pipe_);
|
||||
|
||||
// TODO: If the connection we've got the request from disconnects,
|
||||
// there's nowhere to send the reply. DLQ?
|
||||
if (waiting_for_reply && pipe_ == reply_pipe) {
|
||||
zmq_assert (false);
|
||||
}
|
||||
// If the connection we've got the request from disconnects,
|
||||
// there's nowhere to send the reply. Forget about the reply pipe.
|
||||
// Once the reply is sent it will be dropped.
|
||||
if (waiting_for_reply && pipe_ == reply_pipe)
|
||||
reply_pipe = NULL;
|
||||
|
||||
// If corresponding inpipe is still in place simply nullify the pointer
|
||||
// to the outpipe.
|
||||
@@ -150,9 +150,15 @@ int zmq::rep_t::xsend (zmq_msg_t *msg_, int flags_)
|
||||
// overloads the buffer, connection should be torn down.
|
||||
zmq_assert (reply_pipe->check_write (zmq_msg_size (msg_)));
|
||||
|
||||
// Push message to the selected pipe.
|
||||
// Push message to the selected pipe. If requester have disconnected
|
||||
// in the meantime, drop the reply.
|
||||
if (reply_pipe) {
|
||||
reply_pipe->write (msg_);
|
||||
reply_pipe->flush ();
|
||||
}
|
||||
else {
|
||||
zmq_close (msg_);
|
||||
}
|
||||
|
||||
waiting_for_reply = false;
|
||||
reply_pipe = NULL;
|
||||
|
||||
@@ -346,6 +346,7 @@ int zmq::socket_base_t::recv (::zmq_msg_t *msg_, int flags_)
|
||||
{
|
||||
// Get the message.
|
||||
int rc = xrecv (msg_, flags_);
|
||||
int err = errno;
|
||||
|
||||
// Once every inbound_poll_rate messages check for signals and process
|
||||
// incoming commands. This happens only if we are not polling altogether
|
||||
@@ -364,19 +365,22 @@ int zmq::socket_base_t::recv (::zmq_msg_t *msg_, int flags_)
|
||||
if (rc == 0)
|
||||
return 0;
|
||||
|
||||
// If we don't have the message, restore the original cause of the problem.
|
||||
errno = err;
|
||||
|
||||
// If the message cannot be fetched immediately, there are two scenarios.
|
||||
// For non-blocking recv, commands are processed in case there's a revive
|
||||
// command already waiting int a command pipe. If it's not, return EAGAIN.
|
||||
// In blocking scenario, commands are processed over and over again until
|
||||
// we are able to fetch a message.
|
||||
if (flags_ & ZMQ_NOBLOCK) {
|
||||
if (errno != EAGAIN)
|
||||
return -1;
|
||||
app_thread->process_commands (false, false);
|
||||
rc = xrecv (msg_, flags_);
|
||||
ticks = 0;
|
||||
return xrecv (msg_, flags_);
|
||||
}
|
||||
else {
|
||||
|
||||
// In blocking scenario, commands are processed over and over again until
|
||||
// we are able to fetch a message.
|
||||
while (rc != 0) {
|
||||
if (errno != EAGAIN)
|
||||
return -1;
|
||||
@@ -384,9 +388,7 @@ int zmq::socket_base_t::recv (::zmq_msg_t *msg_, int flags_)
|
||||
rc = xrecv (msg_, flags_);
|
||||
ticks = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return rc;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int zmq::socket_base_t::close ()
|
||||
|
||||
@@ -275,7 +275,7 @@ zmq::fd_t zmq::tcp_listener_t::accept ()
|
||||
|
||||
#if (defined ZMQ_HAVE_LINUX || defined ZMQ_HAVE_FREEBSD || \
|
||||
defined ZMQ_HAVE_OPENBSD || defined ZMQ_HAVE_OSX || \
|
||||
defined ZMQ_HAVE_OPENVMS)
|
||||
defined ZMQ_HAVE_OPENVMS || defined ZMQ_HAVE_NETBSD)
|
||||
if (sock == -1 &&
|
||||
(errno == EAGAIN || errno == EWOULDBLOCK ||
|
||||
errno == EINTR || errno == ECONNABORTED))
|
||||
|
||||
@@ -47,7 +47,7 @@ const char *zmq::uuid_t::to_string ()
|
||||
return (char*) uuid_str;
|
||||
}
|
||||
|
||||
#elif defined ZMQ_HAVE_FREEBSD
|
||||
#elif defined ZMQ_HAVE_FREEBSD || defined ZMQ_HAVE_NETBSD
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <uuid.h>
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
#include "platform.hpp"
|
||||
#include "stdint.hpp"
|
||||
|
||||
#if defined ZMQ_HAVE_FREEBSD
|
||||
#if defined ZMQ_HAVE_FREEBSD || defined ZMQ_HAVE_NETBSD
|
||||
#include <uuid.h>
|
||||
#elif defined ZMQ_HAVE_LINUX || defined ZMQ_HAVE_SOLARIS || defined ZMQ_HAVE_OSX
|
||||
#include <uuid/uuid.h>
|
||||
@@ -60,7 +60,7 @@ namespace zmq
|
||||
#endif
|
||||
::UUID uuid;
|
||||
RPC_CSTR uuid_str;
|
||||
#elif defined ZMQ_HAVE_FREEBSD
|
||||
#elif defined ZMQ_HAVE_FREEBSD || defined ZMQ_HAVE_NETBSD
|
||||
::uuid_t uuid;
|
||||
char *uuid_str;
|
||||
#elif defined ZMQ_HAVE_LINUX || defined ZMQ_HAVE_SOLARIS || defined ZMQ_HAVE_OSX
|
||||
|
||||
@@ -37,7 +37,8 @@
|
||||
#if 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_HPUX || defined ZMQ_HAVE_AIX ||\
|
||||
defined ZMQ_HAVE_NETBSD
|
||||
#include <poll.h>
|
||||
#endif
|
||||
|
||||
@@ -325,7 +326,8 @@ int zmq_poll (zmq_pollitem_t *items_, int nitems_, long timeout_)
|
||||
#if 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_HPUX || defined ZMQ_HAVE_AIX ||\
|
||||
defined ZMQ_HAVE_NETBSD
|
||||
|
||||
pollfd *pollfds = (pollfd*) malloc (nitems_ * sizeof (pollfd));
|
||||
zmq_assert (pollfds);
|
||||
|
||||
Reference in New Issue
Block a user