ext/zeromq/include/zmq.h in rbczmq-1.7.1 vs ext/zeromq/include/zmq.h in rbczmq-1.7.2
- old
+ new
@@ -1,10 +1,7 @@
/*
- Copyright (c) 2007-2012 iMatix Corporation
- Copyright (c) 2009-2011 250bpm s.r.o.
- Copyright (c) 2011 VMware, Inc.
- Copyright (c) 2007-2011 Other contributors as noted in the AUTHORS file
+ Copyright (c) 2007-2013 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
@@ -16,31 +13,41 @@
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 <http://www.gnu.org/licenses/>.
+
+ *************************************************************************
+ NOTE to contributors. This file comprises the principal public contract
+ for ZeroMQ API users (along with zmq_utils.h). Any change to this file
+ supplied in a stable release SHOULD not break existing applications.
+ In practice this means that the value of constants must not change, and
+ that old values may not be reused for new constants.
+ *************************************************************************
*/
#ifndef __ZMQ_H_INCLUDED__
#define __ZMQ_H_INCLUDED__
#ifdef __cplusplus
extern "C" {
#endif
-#if !defined WINCE
+#if !defined _WIN32_WCE
#include <errno.h>
#endif
#include <stddef.h>
#include <stdio.h>
#if defined _WIN32
#include <winsock2.h>
#endif
/* Handle DSO symbol visibility */
#if defined _WIN32
-# if defined DLL_EXPORT
+# if defined ZMQ_STATIC
+# define ZMQ_EXPORT
+# elif defined DLL_EXPORT
# define ZMQ_EXPORT __declspec(dllexport)
# else
# define ZMQ_EXPORT __declspec(dllimport)
# endif
#else
@@ -51,18 +58,36 @@
# else
# define ZMQ_EXPORT
# endif
#endif
+/* Define integer types needed for event interface */
+#if defined ZMQ_HAVE_SOLARIS || defined ZMQ_HAVE_OPENVMS
+# include <inttypes.h>
+#elif defined _MSC_VER && _MSC_VER < 1600
+# ifndef int32_t
+typedef __int32 int32_t;
+# endif
+# ifndef uint16_t
+typedef unsigned __int16 uint16_t;
+# endif
+# ifndef uint8_t
+typedef unsigned __int8 uint8_t;
+# endif
+#else
+# include <stdint.h>
+#endif
+
+
/******************************************************************************/
/* 0MQ versioning support. */
/******************************************************************************/
/* Version macros for compile-time API version detection */
-#define ZMQ_VERSION_MAJOR 3
-#define ZMQ_VERSION_MINOR 2
-#define ZMQ_VERSION_PATCH 3
+#define ZMQ_VERSION_MAJOR 4
+#define ZMQ_VERSION_MINOR 1
+#define ZMQ_VERSION_PATCH 0
#define ZMQ_MAKE_VERSION(major, minor, patch) \
((major) * 10000 + (minor) * 100 + (patch))
#define ZMQ_VERSION \
ZMQ_MAKE_VERSION(ZMQ_VERSION_MAJOR, ZMQ_VERSION_MINOR, ZMQ_VERSION_PATCH)
@@ -152,26 +177,33 @@
/******************************************************************************/
/* 0MQ infrastructure (a.k.a. context) initialisation & termination. */
/******************************************************************************/
/* New API */
-/* Context options */
-#define ZMQ_IO_THREADS 1
-#define ZMQ_MAX_SOCKETS 2
-/* Default for new contexts */
-#define ZMQ_IO_THREADS_DFLT 1
-#define ZMQ_MAX_SOCKETS_DFLT 1024
+enum zmq_ctx_opts_t {
+ /* Context options */
+ ZMQ_IO_THREADS = 1,
+ ZMQ_MAX_SOCKETS = 2
+};
+enum zmq_ctx_defaults_t {
+ /* Default for new contexts */
+ ZMQ_IO_THREADS_DFLT = 1,
+ ZMQ_MAX_SOCKETS_DFLT = 1024
+};
+
ZMQ_EXPORT void *zmq_ctx_new (void);
-ZMQ_EXPORT int zmq_ctx_destroy (void *context);
+ZMQ_EXPORT int zmq_ctx_term (void *context);
+ZMQ_EXPORT int zmq_ctx_shutdown (void *ctx_);
ZMQ_EXPORT int zmq_ctx_set (void *context, int option, int optval);
ZMQ_EXPORT int zmq_ctx_get (void *context, int option);
/* Old (legacy) API */
ZMQ_EXPORT void *zmq_init (int io_threads);
ZMQ_EXPORT int zmq_term (void *context);
+ZMQ_EXPORT int zmq_ctx_destroy (void *context);
/******************************************************************************/
/* 0MQ message definition. */
/******************************************************************************/
@@ -198,157 +230,141 @@
/******************************************************************************/
/* 0MQ socket definition. */
/******************************************************************************/
-/* Socket types. */
-#define ZMQ_PAIR 0
-#define ZMQ_PUB 1
-#define ZMQ_SUB 2
-#define ZMQ_REQ 3
-#define ZMQ_REP 4
-#define ZMQ_DEALER 5
-#define ZMQ_ROUTER 6
-#define ZMQ_PULL 7
-#define ZMQ_PUSH 8
-#define ZMQ_XPUB 9
-#define ZMQ_XSUB 10
+/* Socket types. */
+enum zmq_socket_types_t {
+ ZMQ_PAIR = 0,
+ ZMQ_PUB = 1,
+ ZMQ_SUB = 2,
+ ZMQ_REQ = 3,
+ ZMQ_REP = 4,
+ ZMQ_DEALER = 5,
+ ZMQ_ROUTER = 6,
+ ZMQ_PULL = 7,
+ ZMQ_PUSH = 8,
+ ZMQ_XPUB = 9,
+ ZMQ_XSUB = 10,
+ ZMQ_STREAM = 11
+};
-/* Deprecated aliases */
-#define ZMQ_XREQ ZMQ_DEALER
-#define ZMQ_XREP ZMQ_ROUTER
-
/* Socket options. */
-#define ZMQ_AFFINITY 4
-#define ZMQ_IDENTITY 5
-#define ZMQ_SUBSCRIBE 6
-#define ZMQ_UNSUBSCRIBE 7
-#define ZMQ_RATE 8
-#define ZMQ_RECOVERY_IVL 9
-#define ZMQ_SNDBUF 11
-#define ZMQ_RCVBUF 12
-#define ZMQ_RCVMORE 13
-#define ZMQ_FD 14
-#define ZMQ_EVENTS 15
-#define ZMQ_TYPE 16
-#define ZMQ_LINGER 17
-#define ZMQ_RECONNECT_IVL 18
-#define ZMQ_BACKLOG 19
-#define ZMQ_RECONNECT_IVL_MAX 21
-#define ZMQ_MAXMSGSIZE 22
-#define ZMQ_SNDHWM 23
-#define ZMQ_RCVHWM 24
-#define ZMQ_MULTICAST_HOPS 25
-#define ZMQ_RCVTIMEO 27
-#define ZMQ_SNDTIMEO 28
-#define ZMQ_IPV4ONLY 31
-#define ZMQ_LAST_ENDPOINT 32
-#define ZMQ_ROUTER_MANDATORY 33
-#define ZMQ_TCP_KEEPALIVE 34
-#define ZMQ_TCP_KEEPALIVE_CNT 35
-#define ZMQ_TCP_KEEPALIVE_IDLE 36
-#define ZMQ_TCP_KEEPALIVE_INTVL 37
-#define ZMQ_TCP_ACCEPT_FILTER 38
-#define ZMQ_DELAY_ATTACH_ON_CONNECT 39
-#define ZMQ_XPUB_VERBOSE 40
+enum zmq_socket_opts_t {
+ ZMQ_AFFINITY = 4,
+ ZMQ_IDENTITY = 5,
+ ZMQ_SUBSCRIBE = 6,
+ ZMQ_UNSUBSCRIBE = 7,
+ ZMQ_RATE = 8,
+ ZMQ_RECOVERY_IVL = 9,
+ ZMQ_SNDBUF = 11,
+ ZMQ_RCVBUF = 12,
+ ZMQ_RCVMORE = 13,
+ ZMQ_FD = 14,
+ ZMQ_EVENTS = 15,
+ ZMQ_TYPE = 16,
+ ZMQ_LINGER = 17,
+ ZMQ_RECONNECT_IVL = 18,
+ ZMQ_BACKLOG = 19,
+ ZMQ_RECONNECT_IVL_MAX = 21,
+ ZMQ_MAXMSGSIZE = 22,
+ ZMQ_SNDHWM = 23,
+ ZMQ_RCVHWM = 24,
+ ZMQ_MULTICAST_HOPS = 25,
+ ZMQ_RCVTIMEO = 27,
+ ZMQ_SNDTIMEO = 28,
+ ZMQ_LAST_ENDPOINT = 32,
+ ZMQ_ROUTER_MANDATORY = 33,
+ ZMQ_TCP_KEEPALIVE = 34,
+ ZMQ_TCP_KEEPALIVE_CNT = 35,
+ ZMQ_TCP_KEEPALIVE_IDLE = 36,
+ ZMQ_TCP_KEEPALIVE_INTVL = 37,
+ ZMQ_TCP_ACCEPT_FILTER = 38,
+ ZMQ_IMMEDIATE = 39,
+ ZMQ_XPUB_VERBOSE = 40,
+ ZMQ_ROUTER_RAW = 41,
+ ZMQ_IPV6 = 42,
+ ZMQ_MECHANISM = 43,
+ ZMQ_PLAIN_SERVER = 44,
+ ZMQ_PLAIN_USERNAME = 45,
+ ZMQ_PLAIN_PASSWORD = 46,
+ ZMQ_CURVE_SERVER = 47,
+ ZMQ_CURVE_PUBLICKEY = 48,
+ ZMQ_CURVE_SECRETKEY = 49,
+ ZMQ_CURVE_SERVERKEY = 50,
+ ZMQ_PROBE_ROUTER = 51,
+ ZMQ_REQ_CORRELATE = 52,
+ ZMQ_REQ_RELAXED = 53,
+ ZMQ_CONFLATE = 54,
+ ZMQ_ZAP_DOMAIN = 55
+};
-
/* Message options */
-#define ZMQ_MORE 1
+enum zmq_msg_opts_t {
+ ZMQ_MORE = 1
+};
/* Send/recv options. */
-#define ZMQ_DONTWAIT 1
-#define ZMQ_SNDMORE 2
+enum zmq_send_recv_opts_t {
+ ZMQ_DONTWAIT = 1,
+ ZMQ_SNDMORE = 2
+};
-/* Deprecated aliases */
-#define ZMQ_NOBLOCK ZMQ_DONTWAIT
-#define ZMQ_FAIL_UNROUTABLE ZMQ_ROUTER_MANDATORY
-#define ZMQ_ROUTER_BEHAVIOR ZMQ_ROUTER_MANDATORY
+/* Security mechanisms */
+enum zmq_security_types_t {
+ ZMQ_NULL = 0,
+ ZMQ_PLAIN = 1,
+ ZMQ_CURVE = 2
+};
/******************************************************************************/
/* 0MQ socket events and monitoring */
/******************************************************************************/
/* Socket transport events (tcp and ipc only) */
-#define ZMQ_EVENT_CONNECTED 1
-#define ZMQ_EVENT_CONNECT_DELAYED 2
-#define ZMQ_EVENT_CONNECT_RETRIED 4
+enum zmq_transport_events_t {
+ ZMQ_EVENT_CONNECTED = 1,
+ ZMQ_EVENT_CONNECT_DELAYED = 2,
+ ZMQ_EVENT_CONNECT_RETRIED = 4,
-#define ZMQ_EVENT_LISTENING 8
-#define ZMQ_EVENT_BIND_FAILED 16
+ ZMQ_EVENT_LISTENING = 8,
+ ZMQ_EVENT_BIND_FAILED = 16,
-#define ZMQ_EVENT_ACCEPTED 32
-#define ZMQ_EVENT_ACCEPT_FAILED 64
+ ZMQ_EVENT_ACCEPTED = 32,
+ ZMQ_EVENT_ACCEPT_FAILED = 64,
-#define ZMQ_EVENT_CLOSED 128
-#define ZMQ_EVENT_CLOSE_FAILED 256
-#define ZMQ_EVENT_DISCONNECTED 512
+ ZMQ_EVENT_CLOSED = 128,
+ ZMQ_EVENT_CLOSE_FAILED = 256,
+ ZMQ_EVENT_DISCONNECTED = 512,
+ ZMQ_EVENT_MONITOR_STOPPED = 1024
+};
#define ZMQ_EVENT_ALL ( ZMQ_EVENT_CONNECTED | ZMQ_EVENT_CONNECT_DELAYED | \
ZMQ_EVENT_CONNECT_RETRIED | ZMQ_EVENT_LISTENING | \
ZMQ_EVENT_BIND_FAILED | ZMQ_EVENT_ACCEPTED | \
ZMQ_EVENT_ACCEPT_FAILED | ZMQ_EVENT_CLOSED | \
- ZMQ_EVENT_CLOSE_FAILED | ZMQ_EVENT_DISCONNECTED )
+ ZMQ_EVENT_CLOSE_FAILED | ZMQ_EVENT_DISCONNECTED | \
+ ZMQ_EVENT_MONITOR_STOPPED)
-/* Socket event data (union member per event) */
+/* Socket event data */
typedef struct {
- int event;
- union {
- struct {
- char *addr;
- int fd;
- } connected;
- struct {
- char *addr;
- int err;
- } connect_delayed;
- struct {
- char *addr;
- int interval;
- } connect_retried;
- struct {
- char *addr;
- int fd;
- } listening;
- struct {
- char *addr;
- int err;
- } bind_failed;
- struct {
- char *addr;
- int fd;
- } accepted;
- struct {
- char *addr;
- int err;
- } accept_failed;
- struct {
- char *addr;
- int fd;
- } closed;
- struct {
- char *addr;
- int err;
- } close_failed;
- struct {
- char *addr;
- int fd;
- } disconnected;
- } data;
+ uint16_t event; // id of the event as bitfield
+ int32_t value ; // value is either error code, fd or reconnect interval
} zmq_event_t;
ZMQ_EXPORT void *zmq_socket (void *, int type);
ZMQ_EXPORT int zmq_close (void *s);
ZMQ_EXPORT int zmq_setsockopt (void *s, int option, const void *optval,
- size_t optvallen);
+ size_t optvallen);
ZMQ_EXPORT int zmq_getsockopt (void *s, int option, void *optval,
size_t *optvallen);
ZMQ_EXPORT int zmq_bind (void *s, const char *addr);
ZMQ_EXPORT int zmq_connect (void *s, const char *addr);
ZMQ_EXPORT int zmq_unbind (void *s, const char *addr);
ZMQ_EXPORT int zmq_disconnect (void *s, const char *addr);
ZMQ_EXPORT int zmq_send (void *s, const void *buf, size_t len, int flags);
+ZMQ_EXPORT int zmq_send_const (void *s, const void *buf, size_t len, int flags);
ZMQ_EXPORT int zmq_recv (void *s, void *buf, size_t len, int flags);
ZMQ_EXPORT int zmq_socket_monitor (void *s, const char *addr, int events);
ZMQ_EXPORT int zmq_sendmsg (void *s, zmq_msg_t *msg, int flags);
ZMQ_EXPORT int zmq_recvmsg (void *s, zmq_msg_t *msg, int flags);
@@ -361,14 +377,20 @@
/******************************************************************************/
/* I/O multiplexing. */
/******************************************************************************/
-#define ZMQ_POLLIN 1
-#define ZMQ_POLLOUT 2
-#define ZMQ_POLLERR 4
+enum zmq_poll_types_t {
+ ZMQ_POLLIN = 1,
+ ZMQ_POLLOUT = 2,
+ ZMQ_POLLERR = 4
+};
+enum zmq_poll_defaults_t {
+ ZMQ_POLLITEMS_DFLT = 16
+};
+
typedef struct
{
void *socket;
#if defined _WIN32
SOCKET fd;
@@ -383,15 +405,36 @@
/* Built-in message proxy (3-way) */
ZMQ_EXPORT int zmq_proxy (void *frontend, void *backend, void *capture);
-/* Deprecated aliases */
-#define ZMQ_STREAMER 1
-#define ZMQ_FORWARDER 2
-#define ZMQ_QUEUE 3
+/* Encode a binary key as printable text using ZMQ RFC 32 */
+ZMQ_EXPORT char *zmq_z85_encode (char *dest, uint8_t *data, size_t size);
+
+/* Encode a binary key from printable text per ZMQ RFC 32 */
+ZMQ_EXPORT uint8_t *zmq_z85_decode (uint8_t *dest, char *string);
+
/* Deprecated method */
ZMQ_EXPORT int zmq_device (int type, void *frontend, void *backend);
+
+/* Deprecated options and aliases */
+enum zmq_deprecated_t {
+ /* Misc */
+ ZMQ_IPV4ONLY = 31,
+ ZMQ_DELAY_ATTACH_ON_CONNECT = ZMQ_IMMEDIATE,
+ ZMQ_NOBLOCK = ZMQ_DONTWAIT,
+ ZMQ_FAIL_UNROUTABLE = ZMQ_ROUTER_MANDATORY,
+ ZMQ_ROUTER_BEHAVIOR = ZMQ_ROUTER_MANDATORY,
+
+ /* Socket aliases */
+ ZMQ_XREQ=ZMQ_DEALER,
+ ZMQ_XREP=ZMQ_ROUTER,
+
+ /* I/O aliasses */
+ ZMQ_STREAMER = 1,
+ ZMQ_FORWARDER = 2,
+ ZMQ_QUEUE = 3
+};
#undef ZMQ_EXPORT
#ifdef __cplusplus
}