You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					648 lines
				
				19 KiB
			
		
		
			
		
	
	
					648 lines
				
				19 KiB
			| 
								 
											7 years ago
										 
									 | 
							
								/*  =========================================================================
							 | 
						||
| 
								 | 
							
								    czmq_prelude.h - CZMQ environment
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Copyright (c) the Contributors as noted in the AUTHORS file.
							 | 
						||
| 
								 | 
							
								    This file is part of CZMQ, the high-level C binding for 0MQ:
							 | 
						||
| 
								 | 
							
								    http://czmq.zeromq.org.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    This Source Code Form is subject to the terms of the Mozilla Public
							 | 
						||
| 
								 | 
							
								    License, v. 2.0. If a copy of the MPL was not distributed with this
							 | 
						||
| 
								 | 
							
								    file, You can obtain one at http://mozilla.org/MPL/2.0/.
							 | 
						||
| 
								 | 
							
								    =========================================================================
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef __CZMQ_PRELUDE_H_INCLUDED__
							 | 
						||
| 
								 | 
							
								#define __CZMQ_PRELUDE_H_INCLUDED__
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//- Establish the compiler and computer system ------------------------------
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *  Defines zero or more of these symbols, for use in any non-portable
							 | 
						||
| 
								 | 
							
								 *  code:
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *  __WINDOWS__         Microsoft C/C++ with Windows calls
							 | 
						||
| 
								 | 
							
								 *  __MSDOS__           System is MS-DOS (set if __WINDOWS__ set)
							 | 
						||
| 
								 | 
							
								 *  __VMS__             System is VAX/VMS or Alpha/OpenVMS
							 | 
						||
| 
								 | 
							
								 *  __UNIX__            System is UNIX
							 | 
						||
| 
								 | 
							
								 *  __OS2__             System is OS/2
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *  __IS_32BIT__        OS/compiler is 32 bits
							 | 
						||
| 
								 | 
							
								 *  __IS_64BIT__        OS/compiler is 64 bits
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *  When __UNIX__ is defined, we also define exactly one of these:
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *  __UTYPE_AUX         Apple AUX
							 | 
						||
| 
								 | 
							
								 *  __UTYPE_BEOS        BeOS
							 | 
						||
| 
								 | 
							
								 *  __UTYPE_BSDOS       BSD/OS
							 | 
						||
| 
								 | 
							
								 *  __UTYPE_DECALPHA    Digital UNIX (Alpha)
							 | 
						||
| 
								 | 
							
								 *  __UTYPE_IBMAIX      IBM RS/6000 AIX
							 | 
						||
| 
								 | 
							
								 *  __UTYPE_FREEBSD     FreeBSD
							 | 
						||
| 
								 | 
							
								 *  __UTYPE_HPUX        HP/UX
							 | 
						||
| 
								 | 
							
								 *  __UTYPE_ANDROID     Android
							 | 
						||
| 
								 | 
							
								 *  __UTYPE_LINUX       Linux
							 | 
						||
| 
								 | 
							
								 *  __UTYPE_GNU         GNU/Hurd
							 | 
						||
| 
								 | 
							
								 *  __UTYPE_MIPS        MIPS (BSD 4.3/System V mixture)
							 | 
						||
| 
								 | 
							
								 *  __UTYPE_NETBSD      NetBSD
							 | 
						||
| 
								 | 
							
								 *  __UTYPE_NEXT        NeXT
							 | 
						||
| 
								 | 
							
								 *  __UTYPE_OPENBSD     OpenBSD
							 | 
						||
| 
								 | 
							
								 *  __UTYPE_OSX         Apple Macintosh OS X
							 | 
						||
| 
								 | 
							
								 *  __UTYPE_IOS         Apple iOS
							 | 
						||
| 
								 | 
							
								 *  __UTYPE_QNX         QNX
							 | 
						||
| 
								 | 
							
								 *  __UTYPE_IRIX        Silicon Graphics IRIX
							 | 
						||
| 
								 | 
							
								 *  __UTYPE_SINIX       SINIX-N (Siemens-Nixdorf Unix)
							 | 
						||
| 
								 | 
							
								 *  __UTYPE_SUNOS       SunOS
							 | 
						||
| 
								 | 
							
								 *  __UTYPE_SUNSOLARIS  Sun Solaris
							 | 
						||
| 
								 | 
							
								 *  __UTYPE_UNIXWARE    SCO UnixWare
							 | 
						||
| 
								 | 
							
								 *                      ... these are the ones I know about so far.
							 | 
						||
| 
								 | 
							
								 *  __UTYPE_GENERIC     Any other UNIX
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *  When __VMS__ is defined, we may define one or more of these:
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *  __VMS_XOPEN         Supports XOPEN functions
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if (defined (__64BIT__) || defined (__x86_64__))
							 | 
						||
| 
								 | 
							
								#    define __IS_64BIT__                //  May have 64-bit OS/compiler
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								#    define __IS_32BIT__                //  Else assume 32-bit OS/compiler
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if (defined WIN32 || defined _WIN32)
							 | 
						||
| 
								 | 
							
								#   undef __WINDOWS__
							 | 
						||
| 
								 | 
							
								#   define __WINDOWS__
							 | 
						||
| 
								 | 
							
								#   undef __MSDOS__
							 | 
						||
| 
								 | 
							
								#   define __MSDOS__
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if (defined WINDOWS || defined _WINDOWS || defined __WINDOWS__)
							 | 
						||
| 
								 | 
							
								#   undef __WINDOWS__
							 | 
						||
| 
								 | 
							
								#   define __WINDOWS__
							 | 
						||
| 
								 | 
							
								#   undef __MSDOS__
							 | 
						||
| 
								 | 
							
								#   define __MSDOS__
							 | 
						||
| 
								 | 
							
								//  Stop cheeky warnings about "deprecated" functions like fopen
							 | 
						||
| 
								 | 
							
								#   if _MSC_VER >= 1500
							 | 
						||
| 
								 | 
							
								#       undef  _CRT_SECURE_NO_DEPRECATE
							 | 
						||
| 
								 | 
							
								#       define _CRT_SECURE_NO_DEPRECATE
							 | 
						||
| 
								 | 
							
								#       pragma warning(disable: 4996)
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  MSDOS               Microsoft C
							 | 
						||
| 
								 | 
							
								//  _MSC_VER            Microsoft C
							 | 
						||
| 
								 | 
							
								#if (defined (MSDOS) || defined (_MSC_VER))
							 | 
						||
| 
								 | 
							
								#   undef __MSDOS__
							 | 
						||
| 
								 | 
							
								#   define __MSDOS__
							 | 
						||
| 
								 | 
							
								#   if (defined (_DEBUG) && !defined (DEBUG))
							 | 
						||
| 
								 | 
							
								#       define DEBUG
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if (defined (__EMX__) && defined (__i386__))
							 | 
						||
| 
								 | 
							
								#   undef __OS2__
							 | 
						||
| 
								 | 
							
								#   define __OS2__
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  VMS                 VAX C (VAX/VMS)
							 | 
						||
| 
								 | 
							
								//  __VMS               Dec C (Alpha/OpenVMS)
							 | 
						||
| 
								 | 
							
								//  __vax__             gcc
							 | 
						||
| 
								 | 
							
								#if (defined (VMS) || defined (__VMS) || defined (__vax__))
							 | 
						||
| 
								 | 
							
								#   undef __VMS__
							 | 
						||
| 
								 | 
							
								#   define __VMS__
							 | 
						||
| 
								 | 
							
								#   if (__VMS_VER >= 70000000)
							 | 
						||
| 
								 | 
							
								#       define __VMS_XOPEN
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  Try to define a __UTYPE_xxx symbol...
							 | 
						||
| 
								 | 
							
								//  unix                SunOS at least
							 | 
						||
| 
								 | 
							
								//  __unix__            gcc
							 | 
						||
| 
								 | 
							
								//  _POSIX_SOURCE is various UNIX systems, maybe also VAX/VMS
							 | 
						||
| 
								 | 
							
								#if (defined (unix) || defined (__unix__) || defined (_POSIX_SOURCE))
							 | 
						||
| 
								 | 
							
								#   if (!defined (__VMS__))
							 | 
						||
| 
								 | 
							
								#       undef __UNIX__
							 | 
						||
| 
								 | 
							
								#       define __UNIX__
							 | 
						||
| 
								 | 
							
								#       if (defined (__alpha))          //  Digital UNIX is 64-bit
							 | 
						||
| 
								 | 
							
								#           undef  __IS_32BIT__
							 | 
						||
| 
								 | 
							
								#           define __IS_64BIT__
							 | 
						||
| 
								 | 
							
								#           define __UTYPE_DECALPHA
							 | 
						||
| 
								 | 
							
								#       endif
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if (defined (_AUX))
							 | 
						||
| 
								 | 
							
								#   define __UTYPE_AUX
							 | 
						||
| 
								 | 
							
								#   define __UNIX__
							 | 
						||
| 
								 | 
							
								#elif (defined (__BEOS__))
							 | 
						||
| 
								 | 
							
								#   define __UTYPE_BEOS
							 | 
						||
| 
								 | 
							
								#   define __UNIX__
							 | 
						||
| 
								 | 
							
								#elif (defined (__hpux))
							 | 
						||
| 
								 | 
							
								#   define __UTYPE_HPUX
							 | 
						||
| 
								 | 
							
								#   define __UNIX__
							 | 
						||
| 
								 | 
							
								#   define _INCLUDE_HPUX_SOURCE
							 | 
						||
| 
								 | 
							
								#   define _INCLUDE_XOPEN_SOURCE
							 | 
						||
| 
								 | 
							
								#   define _INCLUDE_POSIX_SOURCE
							 | 
						||
| 
								 | 
							
								#elif (defined (_AIX) || defined (AIX))
							 | 
						||
| 
								 | 
							
								#   define __UTYPE_IBMAIX
							 | 
						||
| 
								 | 
							
								#   define __UNIX__
							 | 
						||
| 
								 | 
							
								#elif (defined (BSD) || defined (bsd))
							 | 
						||
| 
								 | 
							
								#   define __UTYPE_BSDOS
							 | 
						||
| 
								 | 
							
								#   define __UNIX__
							 | 
						||
| 
								 | 
							
								#elif (defined (__ANDROID__))
							 | 
						||
| 
								 | 
							
								#   define __UTYPE_ANDROID
							 | 
						||
| 
								 | 
							
								#   define __UNIX__
							 | 
						||
| 
								 | 
							
								#elif (defined (LINUX) || defined (linux) || defined (__linux__))
							 | 
						||
| 
								 | 
							
								#   define __UTYPE_LINUX
							 | 
						||
| 
								 | 
							
								#   define __UNIX__
							 | 
						||
| 
								 | 
							
								#   ifndef __NO_CTYPE
							 | 
						||
| 
								 | 
							
								#   define __NO_CTYPE                   //  Suppress warnings on tolower()
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#   ifndef _DEFAULT_SOURCE
							 | 
						||
| 
								 | 
							
								#   define _DEFAULT_SOURCE                  //  Include stuff from 4.3 BSD Unix
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#elif (defined (__GNU__))
							 | 
						||
| 
								 | 
							
								#   define __UTYPE_GNU
							 | 
						||
| 
								 | 
							
								#   define __UNIX__
							 | 
						||
| 
								 | 
							
								#elif (defined (Mips))
							 | 
						||
| 
								 | 
							
								#   define __UTYPE_MIPS
							 | 
						||
| 
								 | 
							
								#   define __UNIX__
							 | 
						||
| 
								 | 
							
								#elif (defined (FreeBSD) || defined (__FreeBSD__))
							 | 
						||
| 
								 | 
							
								#   define __UTYPE_FREEBSD
							 | 
						||
| 
								 | 
							
								#   define __UNIX__
							 | 
						||
| 
								 | 
							
								#elif (defined (NetBSD) || defined (__NetBSD__))
							 | 
						||
| 
								 | 
							
								#   define __UTYPE_NETBSD
							 | 
						||
| 
								 | 
							
								#   define __UNIX__
							 | 
						||
| 
								 | 
							
								#elif (defined (OpenBSD) || defined (__OpenBSD__))
							 | 
						||
| 
								 | 
							
								#   define __UTYPE_OPENBSD
							 | 
						||
| 
								 | 
							
								#   define __UNIX__
							 | 
						||
| 
								 | 
							
								#elif (defined (APPLE) || defined (__APPLE__))
							 | 
						||
| 
								 | 
							
								#   include <TargetConditionals.h>
							 | 
						||
| 
								 | 
							
								#   define __UNIX__
							 | 
						||
| 
								 | 
							
								#   if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR
							 | 
						||
| 
								 | 
							
								#      define __UTYPE_IOS
							 | 
						||
| 
								 | 
							
								#   else
							 | 
						||
| 
								 | 
							
								#      define __UTYPE_OSX
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#elif (defined (NeXT))
							 | 
						||
| 
								 | 
							
								#   define __UTYPE_NEXT
							 | 
						||
| 
								 | 
							
								#   define __UNIX__
							 | 
						||
| 
								 | 
							
								#elif (defined (__QNX__))
							 | 
						||
| 
								 | 
							
								#   define __UTYPE_QNX
							 | 
						||
| 
								 | 
							
								#   define __UNIX__
							 | 
						||
| 
								 | 
							
								#elif (defined (sgi))
							 | 
						||
| 
								 | 
							
								#   define __UTYPE_IRIX
							 | 
						||
| 
								 | 
							
								#   define __UNIX__
							 | 
						||
| 
								 | 
							
								#elif (defined (sinix))
							 | 
						||
| 
								 | 
							
								#   define __UTYPE_SINIX
							 | 
						||
| 
								 | 
							
								#   define __UNIX__
							 | 
						||
| 
								 | 
							
								#elif (defined (SOLARIS) || defined (__SVR4)) || defined (SVR4)
							 | 
						||
| 
								 | 
							
								#   define __UTYPE_SUNSOLARIS
							 | 
						||
| 
								 | 
							
								#   define __UNIX__
							 | 
						||
| 
								 | 
							
								#elif (defined (SUNOS) || defined (SUN) || defined (sun))
							 | 
						||
| 
								 | 
							
								#   define __UTYPE_SUNOS
							 | 
						||
| 
								 | 
							
								#   define __UNIX__
							 | 
						||
| 
								 | 
							
								#elif (defined (__USLC__) || defined (UnixWare))
							 | 
						||
| 
								 | 
							
								#   define __UTYPE_UNIXWARE
							 | 
						||
| 
								 | 
							
								#   define __UNIX__
							 | 
						||
| 
								 | 
							
								#elif (defined (__CYGWIN__))
							 | 
						||
| 
								 | 
							
								#   define __UTYPE_CYGWIN
							 | 
						||
| 
								 | 
							
								#   define __UNIX__
							 | 
						||
| 
								 | 
							
								#elif (defined (__UNIX__))
							 | 
						||
| 
								 | 
							
								#   define __UTYPE_GENERIC
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//- Always include ZeroMQ headers -------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "zmq.h"
							 | 
						||
| 
								 | 
							
								#if (ZMQ_VERSION < ZMQ_MAKE_VERSION (4, 2, 0))
							 | 
						||
| 
								 | 
							
								#   include "zmq_utils.h"
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//- Standard ANSI include files ---------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <ctype.h>
							 | 
						||
| 
								 | 
							
								#include <limits.h>
							 | 
						||
| 
								 | 
							
								#include <stdarg.h>
							 | 
						||
| 
								 | 
							
								#include <stdio.h>
							 | 
						||
| 
								 | 
							
								#include <stdlib.h>
							 | 
						||
| 
								 | 
							
								#include <stddef.h>
							 | 
						||
| 
								 | 
							
								#include <string.h>
							 | 
						||
| 
								 | 
							
								#include <time.h>
							 | 
						||
| 
								 | 
							
								#include <errno.h>
							 | 
						||
| 
								 | 
							
								#include <float.h>
							 | 
						||
| 
								 | 
							
								#include <math.h>
							 | 
						||
| 
								 | 
							
								#include <signal.h>
							 | 
						||
| 
								 | 
							
								#include <setjmp.h>
							 | 
						||
| 
								 | 
							
								#include <assert.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//- System-specific include files -------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if (defined (__MSDOS__))
							 | 
						||
| 
								 | 
							
								#   if (defined (__WINDOWS__))
							 | 
						||
| 
								 | 
							
								#       if (_WIN32_WINNT < 0x0600)
							 | 
						||
| 
								 | 
							
								#           undef _WIN32_WINNT
							 | 
						||
| 
								 | 
							
								#           define _WIN32_WINNT 0x0600
							 | 
						||
| 
								 | 
							
								#       endif
							 | 
						||
| 
								 | 
							
								#       if (!defined (FD_SETSIZE))
							 | 
						||
| 
								 | 
							
								#           define FD_SETSIZE 1024      //  Max. filehandles/sockets
							 | 
						||
| 
								 | 
							
								#       endif
							 | 
						||
| 
								 | 
							
								#       include <direct.h>
							 | 
						||
| 
								 | 
							
								#       include <winsock2.h>
							 | 
						||
| 
								 | 
							
								#       include <windows.h>
							 | 
						||
| 
								 | 
							
								#       include <process.h>
							 | 
						||
| 
								 | 
							
								#       include <ws2tcpip.h>            //  For getnameinfo ()
							 | 
						||
| 
								 | 
							
								#       include <iphlpapi.h>            //  For GetAdaptersAddresses ()
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#   include <malloc.h>
							 | 
						||
| 
								 | 
							
								#   include <dos.h>
							 | 
						||
| 
								 | 
							
								#   include <io.h>
							 | 
						||
| 
								 | 
							
								#   include <fcntl.h>
							 | 
						||
| 
								 | 
							
								#   include <sys/types.h>
							 | 
						||
| 
								 | 
							
								#   include <sys/stat.h>
							 | 
						||
| 
								 | 
							
								#   include <sys/utime.h>
							 | 
						||
| 
								 | 
							
								#   include <share.h>
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if (defined (__UNIX__))
							 | 
						||
| 
								 | 
							
								#   include <fcntl.h>
							 | 
						||
| 
								 | 
							
								#   include <netdb.h>
							 | 
						||
| 
								 | 
							
								#   include <unistd.h>
							 | 
						||
| 
								 | 
							
								#   include <pthread.h>
							 | 
						||
| 
								 | 
							
								#   include <dirent.h>
							 | 
						||
| 
								 | 
							
								#   include <pwd.h>
							 | 
						||
| 
								 | 
							
								#   include <grp.h>
							 | 
						||
| 
								 | 
							
								#   include <utime.h>
							 | 
						||
| 
								 | 
							
								#   include <inttypes.h>
							 | 
						||
| 
								 | 
							
								#   include <syslog.h>
							 | 
						||
| 
								 | 
							
								#   include <sys/types.h>
							 | 
						||
| 
								 | 
							
								#   include <sys/param.h>
							 | 
						||
| 
								 | 
							
								#   include <sys/socket.h>
							 | 
						||
| 
								 | 
							
								#   include <sys/time.h>
							 | 
						||
| 
								 | 
							
								#   include <sys/stat.h>
							 | 
						||
| 
								 | 
							
								#   include <sys/ioctl.h>
							 | 
						||
| 
								 | 
							
								#   include <sys/file.h>
							 | 
						||
| 
								 | 
							
								#   include <sys/wait.h>
							 | 
						||
| 
								 | 
							
								#   include <sys/un.h>
							 | 
						||
| 
								 | 
							
								#   include <sys/uio.h>             //  Let CZMQ build with libzmq/3.x
							 | 
						||
| 
								 | 
							
								#   include <netinet/in.h>          //  Must come before arpa/inet.h
							 | 
						||
| 
								 | 
							
								#   if (!defined (__UTYPE_ANDROID)) && (!defined (__UTYPE_IBMAIX)) \
							 | 
						||
| 
								 | 
							
								    && (!defined (__UTYPE_HPUX))
							 | 
						||
| 
								 | 
							
								#       include <ifaddrs.h>
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#   if defined (__UTYPE_SUNSOLARIS) || defined (__UTYPE_SUNOS)
							 | 
						||
| 
								 | 
							
								#       include <sys/sockio.h>
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#   if (!defined (__UTYPE_BEOS))
							 | 
						||
| 
								 | 
							
								#       include <arpa/inet.h>
							 | 
						||
| 
								 | 
							
								#       if (!defined (TCP_NODELAY))
							 | 
						||
| 
								 | 
							
								#           include <netinet/tcp.h>
							 | 
						||
| 
								 | 
							
								#       endif
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#   if (defined (__UTYPE_IBMAIX) || defined(__UTYPE_QNX))
							 | 
						||
| 
								 | 
							
								#       include <sys/select.h>
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#   if (defined (__UTYPE_BEOS))
							 | 
						||
| 
								 | 
							
								#       include <NetKit.h>
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#   if ((defined (_XOPEN_REALTIME) && (_XOPEN_REALTIME >= 1)) \
							 | 
						||
| 
								 | 
							
								     || (defined (_POSIX_VERSION)  && (_POSIX_VERSION  >= 199309L)))
							 | 
						||
| 
								 | 
							
								#       include <sched.h>
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#   if (defined (__UTYPE_OSX) || defined (__UTYPE_IOS))
							 | 
						||
| 
								 | 
							
								#       include <mach/clock.h>
							 | 
						||
| 
								 | 
							
								#       include <mach/mach.h>           //  For monotonic clocks
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#   if (defined (__UTYPE_OSX))
							 | 
						||
| 
								 | 
							
								#       include <crt_externs.h>         //  For _NSGetEnviron()
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#   if (defined (__UTYPE_ANDROID))
							 | 
						||
| 
								 | 
							
								#       include <android/log.h>
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#   if (defined (__UTYPE_LINUX) && defined (HAVE_LIBSYSTEMD))
							 | 
						||
| 
								 | 
							
								#       include <systemd/sd-daemon.h>
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if (defined (__VMS__))
							 | 
						||
| 
								 | 
							
								#   if (!defined (vaxc))
							 | 
						||
| 
								 | 
							
								#       include <fcntl.h>               //  Not provided by Vax C
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#   include <netdb.h>
							 | 
						||
| 
								 | 
							
								#   include <unistd.h>
							 | 
						||
| 
								 | 
							
								#   include <pthread.h>
							 | 
						||
| 
								 | 
							
								#   include <unixio.h>
							 | 
						||
| 
								 | 
							
								#   include <unixlib.h>
							 | 
						||
| 
								 | 
							
								#   include <types.h>
							 | 
						||
| 
								 | 
							
								#   include <file.h>
							 | 
						||
| 
								 | 
							
								#   include <socket.h>
							 | 
						||
| 
								 | 
							
								#   include <dirent.h>
							 | 
						||
| 
								 | 
							
								#   include <time.h>
							 | 
						||
| 
								 | 
							
								#   include <pwd.h>
							 | 
						||
| 
								 | 
							
								#   include <stat.h>
							 | 
						||
| 
								 | 
							
								#   include <in.h>
							 | 
						||
| 
								 | 
							
								#   include <inet.h>
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if (defined (__OS2__))
							 | 
						||
| 
								 | 
							
								#   include <sys/types.h>               //  Required near top
							 | 
						||
| 
								 | 
							
								#   include <fcntl.h>
							 | 
						||
| 
								 | 
							
								#   include <malloc.h>
							 | 
						||
| 
								 | 
							
								#   include <netdb.h>
							 | 
						||
| 
								 | 
							
								#   include <unistd.h>
							 | 
						||
| 
								 | 
							
								#   include <pthread.h>
							 | 
						||
| 
								 | 
							
								#   include <dirent.h>
							 | 
						||
| 
								 | 
							
								#   include <pwd.h>
							 | 
						||
| 
								 | 
							
								#   include <grp.h>
							 | 
						||
| 
								 | 
							
								#   include <io.h>
							 | 
						||
| 
								 | 
							
								#   include <process.h>
							 | 
						||
| 
								 | 
							
								#   include <sys/param.h>
							 | 
						||
| 
								 | 
							
								#   include <sys/socket.h>
							 | 
						||
| 
								 | 
							
								#   include <sys/select.h>
							 | 
						||
| 
								 | 
							
								#   include <sys/time.h>
							 | 
						||
| 
								 | 
							
								#   include <sys/stat.h>
							 | 
						||
| 
								 | 
							
								#   include <sys/ioctl.h>
							 | 
						||
| 
								 | 
							
								#   include <sys/file.h>
							 | 
						||
| 
								 | 
							
								#   include <sys/wait.h>
							 | 
						||
| 
								 | 
							
								#   include <netinet/in.h>              //  Must come before arpa/inet.h
							 | 
						||
| 
								 | 
							
								#   include <arpa/inet.h>
							 | 
						||
| 
								 | 
							
								#   include <utime.h>
							 | 
						||
| 
								 | 
							
								#   if (!defined (TCP_NODELAY))
							 | 
						||
| 
								 | 
							
								#       include <netinet/tcp.h>
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  Add missing defines for non-POSIX systems
							 | 
						||
| 
								 | 
							
								#ifndef S_IRUSR
							 | 
						||
| 
								 | 
							
								#   define S_IRUSR S_IREAD
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								#ifndef S_IWUSR
							 | 
						||
| 
								 | 
							
								#   define S_IWUSR S_IWRITE
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								#ifndef S_ISDIR
							 | 
						||
| 
								 | 
							
								#   define S_ISDIR(m) (((m) & S_IFDIR) != 0)
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								#ifndef S_ISREG
							 | 
						||
| 
								 | 
							
								#   define S_ISREG(m) (((m) & S_IFREG) != 0)
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//- Check compiler data type sizes ------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if (UCHAR_MAX != 0xFF)
							 | 
						||
| 
								 | 
							
								#   error "Cannot compile: must change definition of 'byte'."
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								#if (USHRT_MAX != 0xFFFFU)
							 | 
						||
| 
								 | 
							
								#    error "Cannot compile: must change definition of 'dbyte'."
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								#if (UINT_MAX != 0xFFFFFFFFU)
							 | 
						||
| 
								 | 
							
								#    error "Cannot compile: must change definition of 'qbyte'."
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//- Data types --------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef unsigned char   byte;           //  Single unsigned byte = 8 bits
							 | 
						||
| 
								 | 
							
								typedef unsigned short  dbyte;          //  Double byte = 16 bits
							 | 
						||
| 
								 | 
							
								typedef unsigned int    qbyte;          //  Quad byte = 32 bits
							 | 
						||
| 
								 | 
							
								typedef struct sockaddr_in  inaddr_t;   //  Internet socket address structure
							 | 
						||
| 
								 | 
							
								typedef struct sockaddr_in6 in6addr_t;  //  Internet 6 socket address structure
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Common structure to hold inaddr_t and in6addr_t with length
							 | 
						||
| 
								 | 
							
								typedef struct {
							 | 
						||
| 
								 | 
							
								    union {
							 | 
						||
| 
								 | 
							
								        inaddr_t __addr;          //  IPv4 address
							 | 
						||
| 
								 | 
							
								        in6addr_t __addr6;        //  IPv6 address
							 | 
						||
| 
								 | 
							
								    } __inaddr_u;
							 | 
						||
| 
								 | 
							
								#define ipv4addr   __inaddr_u.__addr
							 | 
						||
| 
								 | 
							
								#define ipv6addr   __inaddr_u.__addr6
							 | 
						||
| 
								 | 
							
								    int inaddrlen;
							 | 
						||
| 
								 | 
							
								} inaddr_storage_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//- Inevitable macros -------------------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define streq(s1,s2)    (!strcmp ((s1), (s2)))
							 | 
						||
| 
								 | 
							
								#define strneq(s1,s2)   (strcmp ((s1), (s2)))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  Provide random number from 0..(num-1)
							 | 
						||
| 
								 | 
							
								//  Note that (at least in Solaris) while rand() returns an int limited by
							 | 
						||
| 
								 | 
							
								//  RAND_MAX, random() returns a 32-bit value all filled with random bits.
							 | 
						||
| 
								 | 
							
								#if (defined (__WINDOWS__)) || (defined (__UTYPE_IBMAIX)) \
							 | 
						||
| 
								 | 
							
								 || (defined (__UTYPE_HPUX)) || (defined (__UTYPE_SUNOS)) || (defined (__UTYPE_SOLARIS))
							 | 
						||
| 
								 | 
							
								#   define randof(num)  (int) ((float) (num) * rand () / (RAND_MAX + 1.0))
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								# if defined(RAND_MAX)
							 | 
						||
| 
								 | 
							
								#   define randof(num)  (int) ((float) (num) * (random () % RAND_MAX) / (RAND_MAX + 1.0))
							 | 
						||
| 
								 | 
							
								# else
							 | 
						||
| 
								 | 
							
								#   define randof(num)  (int) ((float) (num) * (uint32_t)random () / (UINT32_MAX + 1.0))
							 | 
						||
| 
								 | 
							
								# endif
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Windows MSVS doesn't have stdbool
							 | 
						||
| 
								 | 
							
								#if (defined (_MSC_VER))
							 | 
						||
| 
								 | 
							
								#   if (!defined (__cplusplus) && (!defined (true)))
							 | 
						||
| 
								 | 
							
								#       define true 1
							 | 
						||
| 
								 | 
							
								#       define false 0
							 | 
						||
| 
								 | 
							
								        typedef char bool;
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								#   include <stdbool.h>
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//- A number of POSIX and C99 keywords and data types -----------------------
							 | 
						||
| 
								 | 
							
								//  CZMQ uses uint for array indices; equivalent to unsigned int, but more
							 | 
						||
| 
								 | 
							
								//  convenient in code. We define it in czmq_prelude.h on systems that do
							 | 
						||
| 
								 | 
							
								//  not define it by default.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if (defined (__WINDOWS__))
							 | 
						||
| 
								 | 
							
								#   if (!defined (__cplusplus) && (!defined (inline)))
							 | 
						||
| 
								 | 
							
								#       define inline __inline
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#   define strtoull _strtoui64
							 | 
						||
| 
								 | 
							
								#   define atoll _atoi64
							 | 
						||
| 
								 | 
							
								#   define srandom srand
							 | 
						||
| 
								 | 
							
								#   define TIMEZONE _timezone
							 | 
						||
| 
								 | 
							
								#   if (!defined (__MINGW32__))
							 | 
						||
| 
								 | 
							
								#       define snprintf _snprintf
							 | 
						||
| 
								 | 
							
								#       define vsnprintf _vsnprintf
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								    typedef unsigned long ulong;
							 | 
						||
| 
								 | 
							
								    typedef unsigned int  uint;
							 | 
						||
| 
								 | 
							
								#   if (!defined (__MINGW32__))
							 | 
						||
| 
								 | 
							
								    typedef int mode_t;
							 | 
						||
| 
								 | 
							
								#     if !defined (_SSIZE_T_DEFINED)
							 | 
						||
| 
								 | 
							
								typedef intptr_t ssize_t;
							 | 
						||
| 
								 | 
							
								#       define _SSIZE_T_DEFINED
							 | 
						||
| 
								 | 
							
								#     endif
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#   if ((!defined (__MINGW32__) \
							 | 
						||
| 
								 | 
							
								    || (defined (__MINGW32__) && defined (__IS_64BIT__))) \
							 | 
						||
| 
								 | 
							
								    && !defined (ZMQ_DEFINED_STDINT))
							 | 
						||
| 
								 | 
							
								    typedef __int8 int8_t;
							 | 
						||
| 
								 | 
							
								    typedef __int16 int16_t;
							 | 
						||
| 
								 | 
							
								    typedef __int32 int32_t;
							 | 
						||
| 
								 | 
							
								    typedef __int64 int64_t;
							 | 
						||
| 
								 | 
							
								    typedef unsigned __int8 uint8_t;
							 | 
						||
| 
								 | 
							
								    typedef unsigned __int16 uint16_t;
							 | 
						||
| 
								 | 
							
								    typedef unsigned __int32 uint32_t;
							 | 
						||
| 
								 | 
							
								    typedef unsigned __int64 uint64_t;
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								    typedef uint32_t in_addr_t;
							 | 
						||
| 
								 | 
							
								#   if (!defined (PRId8))
							 | 
						||
| 
								 | 
							
								#       define PRId8    "d"
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#   if (!defined (PRId16))
							 | 
						||
| 
								 | 
							
								#       define PRId16   "d"
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#   if (!defined (PRId32))
							 | 
						||
| 
								 | 
							
								#       define PRId32   "d"
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#   if (!defined (PRId64))
							 | 
						||
| 
								 | 
							
								#       define PRId64   "I64d"
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#   if (!defined (PRIu8))
							 | 
						||
| 
								 | 
							
								#       define PRIu8    "u"
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#   if (!defined (PRIu16))
							 | 
						||
| 
								 | 
							
								#       define PRIu16   "u"
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#   if (!defined (PRIu32))
							 | 
						||
| 
								 | 
							
								#       define PRIu32   "u"
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#   if (!defined (PRIu64))
							 | 
						||
| 
								 | 
							
								#       define PRIu64   "I64u"
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#   if (!defined (va_copy))
							 | 
						||
| 
								 | 
							
								    //  MSVC does not support C99's va_copy so we use a regular assignment
							 | 
						||
| 
								 | 
							
								#       define va_copy(dest,src) (dest) = (src)
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#elif (defined (__UTYPE_OSX))
							 | 
						||
| 
								 | 
							
								    typedef unsigned long ulong;
							 | 
						||
| 
								 | 
							
								    typedef unsigned int uint;
							 | 
						||
| 
								 | 
							
								    //  This fixes header-order dependence problem with some Linux versions
							 | 
						||
| 
								 | 
							
								#elif (defined (__UTYPE_LINUX))
							 | 
						||
| 
								 | 
							
								#   if (__STDC_VERSION__ >= 199901L && !defined (__USE_MISC))
							 | 
						||
| 
								 | 
							
								    typedef unsigned int uint;
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//- Non-portable declaration specifiers -------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  For thread-local storage
							 | 
						||
| 
								 | 
							
								#if defined (__WINDOWS__)
							 | 
						||
| 
								 | 
							
								#   define CZMQ_THREADLS __declspec(thread)
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								#   define CZMQ_THREADLS __thread
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  Replacement for malloc() which asserts if we run out of heap, and
							 | 
						||
| 
								 | 
							
								//  which zeroes the allocated block.
							 | 
						||
| 
								 | 
							
								static inline void *
							 | 
						||
| 
								 | 
							
								safe_malloc (size_t size, const char *file, unsigned line)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								//     printf ("%s:%u %08d\n", file, line, (int) size);
							 | 
						||
| 
								 | 
							
								    void *mem = calloc (1, size);
							 | 
						||
| 
								 | 
							
								    if (mem == NULL) {
							 | 
						||
| 
								 | 
							
								        fprintf (stderr, "FATAL ERROR at %s:%u\n", file, line);
							 | 
						||
| 
								 | 
							
								        fprintf (stderr, "OUT OF MEMORY (malloc returned NULL)\n");
							 | 
						||
| 
								 | 
							
								        fflush (stderr);
							 | 
						||
| 
								 | 
							
								        abort ();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    return mem;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  Define _ZMALLOC_DEBUG if you need to trace memory leaks using e.g. mtrace,
							 | 
						||
| 
								 | 
							
								//  otherwise all allocations will claim to come from czmq_prelude.h. For best
							 | 
						||
| 
								 | 
							
								//  results, compile all classes so you see dangling object allocations.
							 | 
						||
| 
								 | 
							
								//  _ZMALLOC_PEDANTIC does the same thing, but its intention is to propagate
							 | 
						||
| 
								 | 
							
								//  out of memory condition back up the call stack.
							 | 
						||
| 
								 | 
							
								#if defined (_ZMALLOC_DEBUG) || defined (_ZMALLOC_PEDANTIC)
							 | 
						||
| 
								 | 
							
								#   define zmalloc(size) calloc(1,(size))
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								#   define zmalloc(size) safe_malloc((size), __FILE__, __LINE__)
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  GCC supports validating format strings for functions that act like printf
							 | 
						||
| 
								 | 
							
								#if defined (__GNUC__) && (__GNUC__ >= 2)
							 | 
						||
| 
								 | 
							
								#   define CHECK_PRINTF(a)   __attribute__((format (printf, a, a + 1)))
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								#   define CHECK_PRINTF(a)
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  Lets us write code that compiles both on Windows and normal platforms
							 | 
						||
| 
								 | 
							
								#if !defined (__WINDOWS__)
							 | 
						||
| 
								 | 
							
								typedef int SOCKET;
							 | 
						||
| 
								 | 
							
								#   define closesocket      close
							 | 
						||
| 
								 | 
							
								#   define INVALID_SOCKET   -1
							 | 
						||
| 
								 | 
							
								#   define SOCKET_ERROR     -1
							 | 
						||
| 
								 | 
							
								#   define O_BINARY         0
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//- Include non-portable header files based on platform.h -------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if defined (HAVE_LINUX_WIRELESS_H)
							 | 
						||
| 
								 | 
							
								#   include <linux/wireless.h>
							 | 
						||
| 
								 | 
							
								//  This would normally come from net/if.h
							 | 
						||
| 
								 | 
							
								unsigned int if_nametoindex (const char *ifname);
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								#   if defined (HAVE_NET_IF_H)
							 | 
						||
| 
								 | 
							
								#       include <net/if.h>
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#   if defined (HAVE_NET_IF_MEDIA_H)
							 | 
						||
| 
								 | 
							
								#       include <net/if_media.h>
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if defined (__WINDOWS__) && !defined (HAVE_UUID)
							 | 
						||
| 
								 | 
							
								#   define HAVE_UUID 1
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								#if defined (__UTYPE_OSX) && !defined (HAVE_UUID)
							 | 
						||
| 
								 | 
							
								#   define HAVE_UUID 1
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								#if defined (HAVE_UUID)
							 | 
						||
| 
								 | 
							
								#   if defined (__UTYPE_FREEBSD) || defined (__UTYPE_NETBSD)
							 | 
						||
| 
								 | 
							
								#       include <uuid.h>
							 | 
						||
| 
								 | 
							
								#   elif defined __UTYPE_HPUX
							 | 
						||
| 
								 | 
							
								#       include <dce/uuid.h>
							 | 
						||
| 
								 | 
							
								#   elif defined (__UNIX__)
							 | 
						||
| 
								 | 
							
								#       include <uuid/uuid.h>
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  ZMQ compatibility macros
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if ZMQ_VERSION_MAJOR == 4
							 | 
						||
| 
								 | 
							
								#   define ZMQ_POLL_MSEC    1           //  zmq_poll is msec
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#elif ZMQ_VERSION_MAJOR == 3
							 | 
						||
| 
								 | 
							
								#   define ZMQ_POLL_MSEC    1           //  zmq_poll is msec
							 | 
						||
| 
								 | 
							
								#   if  ZMQ_VERSION_MINOR < 2
							 | 
						||
| 
								 | 
							
								#       define zmq_ctx_new  zmq_init
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#   define zmq_ctx_term     zmq_term
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#elif ZMQ_VERSION_MAJOR == 2
							 | 
						||
| 
								 | 
							
								#   define ZMQ_POLL_MSEC    1000        //  zmq_poll is usec
							 | 
						||
| 
								 | 
							
								#   define zmq_sendmsg      zmq_send    //  Smooth out 2.x changes
							 | 
						||
| 
								 | 
							
								#   define zmq_recvmsg      zmq_recv
							 | 
						||
| 
								 | 
							
								#   define zmq_ctx_new      zmq_init
							 | 
						||
| 
								 | 
							
								#   define zmq_ctx_term     zmq_term
							 | 
						||
| 
								 | 
							
								#   define zmq_msg_send(m,s,f)  zmq_sendmsg ((s),(m),(f))
							 | 
						||
| 
								 | 
							
								#   define zmq_msg_recv(m,s,f)  zmq_recvmsg ((s),(m),(f))
							 | 
						||
| 
								 | 
							
								    //  Older libzmq APIs may be missing some aspects of libzmq v3.0
							 | 
						||
| 
								 | 
							
								#   ifndef ZMQ_ROUTER
							 | 
						||
| 
								 | 
							
								#       define ZMQ_ROUTER       ZMQ_XREP
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#   ifndef ZMQ_DEALER
							 | 
						||
| 
								 | 
							
								#       define ZMQ_DEALER       ZMQ_XREQ
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#   ifndef ZMQ_DONTWAIT
							 | 
						||
| 
								 | 
							
								#       define ZMQ_DONTWAIT     ZMQ_NOBLOCK
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#   ifndef ZMQ_XSUB
							 | 
						||
| 
								 | 
							
								#       error "please upgrade your libzmq from http://zeromq.org"
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#   if  ZMQ_VERSION_MINOR == 0 \
							 | 
						||
| 
								 | 
							
								    || (ZMQ_VERSION_MINOR == 1 && ZMQ_VERSION_PATCH < 7)
							 | 
						||
| 
								 | 
							
								#       error "CZMQ requires at least libzmq/2.1.7 stable"
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 |