diff --git a/doc/Makefile.am b/doc/Makefile.am index f2683f86..2a19124a 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -1,12 +1,15 @@ -MAN3 = zmq_bind.3 zmq_close.3 zmq_connect.3 zmq_proxy.3 \ +MAN3 = zmq_bind.3 zmq_unbind.3 zmq_connect.3 zmq_disconnect.3 zmq_close.3 \ zmq_ctx_new.3 zmq_ctx_destroy.3 zmq_ctx_get.3 zmq_ctx_set.3 \ - zmq_init.3 zmq_term.3 \ - zmq_msg_close.3 zmq_msg_copy.3 zmq_msg_data.3 zmq_msg_init.3 \ - zmq_msg_init_data.3 zmq_msg_init_size.3 zmq_msg_move.3 zmq_msg_size.3 \ + zmq_msg_init.3 zmq_msg_init_data.3 zmq_msg_init_size.3 \ + zmq_msg_move.3 zmq_msg_copy.3 zmq_msg_size.3 zmq_msg_data.3 zmq_msg_close.3 \ zmq_msg_send.3 zmq_msg_recv.3 \ - zmq_poll.3 zmq_recv.3 zmq_send.3 zmq_setsockopt.3 zmq_socket.3 \ - zmq_socket_monitor.3 zmq_strerror.3 zmq_version.3 zmq_getsockopt.3 zmq_errno.3 \ - zmq_sendmsg.3 zmq_recvmsg.3 zmq_msg_get.3 zmq_msg_set.3 zmq_msg_more.3 + zmq_send.3 zmq_recv.3 \ + zmq_msg_get.3 zmq_msg_set.3 zmq_msg_more.3 \ + zmq_getsockopt.3 zmq_setsockopt.3 \ + zmq_socket.3 zmq_socket_monitor.3 zmq_poll.3 \ + zmq_errno.3 zmq_strerror.3 zmq_version.3 zmq_proxy.3 \ + zmq_sendmsg.3 zmq_recvmsg.3 zmq_init.3 zmq_term.3 + MAN7 = zmq.7 zmq_tcp.7 zmq_pgm.7 zmq_epgm.7 zmq_inproc.7 zmq_ipc.7 MAN_DOC = $(MAN1) $(MAN3) $(MAN7) diff --git a/doc/zmq_recvmsg.txt b/doc/zmq_recvmsg.txt index 1787431b..9aededda 100644 --- a/doc/zmq_recvmsg.txt +++ b/doc/zmq_recvmsg.txt @@ -26,6 +26,8 @@ Specifies that the operation should be performed in non-blocking mode. If there are no messages available on the specified 'socket', the _zmq_recvmsg()_ function shall fail with 'errno' set to EAGAIN. +NOTE: this API method is deprecated in favor of zmq_msg_recv(3). + Multi-part messages ~~~~~~~~~~~~~~~~~~~ diff --git a/doc/zmq_sendmsg.txt b/doc/zmq_sendmsg.txt index a9fc5b33..aacd7aec 100644 --- a/doc/zmq_sendmsg.txt +++ b/doc/zmq_sendmsg.txt @@ -36,6 +36,7 @@ NOTE: A successful invocation of _zmq_sendmsg()_ does not indicate that the message has been transmitted to the network, only that it has been queued on the 'socket' and 0MQ has assumed responsibility for the message. +NOTE: this API method is deprecated in favor of zmq_msg_send(3). Multi-part messages ~~~~~~~~~~~~~~~~~~~ diff --git a/doc/zmq_setsockopt.txt b/doc/zmq_setsockopt.txt index 2928397a..018070d0 100644 --- a/doc/zmq_setsockopt.txt +++ b/doc/zmq_setsockopt.txt @@ -371,11 +371,8 @@ ZMQ_ROUTER_MANDATORY: accept only routable messages on ROUTER sockets Sets the 'ROUTER' socket behavior when an unroutable message is encountered. A value of `0` is the default and discards the message silently when it cannot be -routed. A value of `1` returns an 'EAGAIN' error code if the message cannot be -routed. - -Note: Setting this socket option may have unpredictable effects on reactor-type -libraries that assume EAGAIN will only be sent in HWM-type situations. +routed. A value of `1` returns an 'EHOSTUNREACH' error code if the message +cannot be routed. [horizontal] Option value type:: int diff --git a/include/zmq.h b/include/zmq.h index e349f9c5..9678b870 100644 --- a/include/zmq.h +++ b/include/zmq.h @@ -261,6 +261,7 @@ ZMQ_EXPORT int zmq_msg_set (zmq_msg_t *msg, int option, int optval); /* Deprecated aliases */ #define ZMQ_NOBLOCK ZMQ_DONTWAIT +#define ZMQ_FAIL_UNROUTABLE ZMQ_ROUTER_MANDATORY #define ZMQ_ROUTER_BEHAVIOR ZMQ_ROUTER_MANDATORY /******************************************************************************/ diff --git a/src/proxy.cpp b/src/proxy.cpp index 5cd8ae52..f64073ec 100644 --- a/src/proxy.cpp +++ b/src/proxy.cpp @@ -19,13 +19,39 @@ */ #include -#include "../include/zmq.h" #include "platform.hpp" #include "proxy.hpp" #include "socket_base.hpp" #include "likely.hpp" #include "err.hpp" +#if defined ZMQ_FORCE_SELECT +#define ZMQ_POLL_BASED_ON_SELECT +#elif defined ZMQ_FORCE_POLL +#define ZMQ_POLL_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_POLL_BASED_ON_POLL +#elif defined ZMQ_HAVE_WINDOWS || defined ZMQ_HAVE_OPENVMS ||\ + defined ZMQ_HAVE_CYGWIN +#define ZMQ_POLL_BASED_ON_SELECT +#endif + +// On AIX platform, poll.h has to be included first 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_POLL_BASED_ON_POLL +#include +#endif + +// zmq.h must be included *after* poll.h for AIX to build properly +#include "../include/zmq.h" + + int zmq::proxy ( class socket_base_t *frontend_, class socket_base_t *backend_, diff --git a/src/router.cpp b/src/router.cpp index fdba1f82..c136e607 100644 --- a/src/router.cpp +++ b/src/router.cpp @@ -162,7 +162,7 @@ int zmq::router_t::xsend (msg_t *msg_, int flags_) else if (mandatory) { more_out = false; - errno = EAGAIN; + errno = EHOSTUNREACH; return -1; } }