0
0
mirror of https://github.com/zeromq/libzmq.git synced 2025-01-22 15:56:14 +08:00

156 Commits

Author SHA1 Message Date
AJ Lewis
616bcf9fc2 Fix up build on AIX7
Copy logic from zmq.cpp into device.cpp for getting poll.h included.

Ensure that zmq.h is included *after* poll.h in both zmq.cpp and
device.cpp.

Signed-off-by: AJ Lewis <aj.lewis@quantum.com>
2012-06-05 09:15:37 -05:00
Martin Hurton
13ef1e4f26 Make wsa_error_to_errno pure function 2012-05-27 16:10:19 +02:00
Lourens Naudé
991b7fcc04 Rename zmq_monitor to zmq_ctx_set_monitor for compat with existing context specific APIs 2012-05-22 20:15:18 +01:00
Lourens Naudé
4767159f39 Initial stab at a context level monitor callback and registration API 2012-05-21 20:47:11 +01:00
Sergey KHripchenko
489481857a 2nd try wuth sock->unbind() and sock->disconnect(). now with blackjack and const char*'s 2012-04-20 18:59:08 +04:00
Sergey KHripchenko
7b8e728e43 implement zmq_unbind(),zmq_disconnect(), zmq->sock->getsockopt(ZMQ_LAST_ENDPOINT_ID) 2012-04-18 23:42:11 +04:00
Pieter Hintjens
eb8217bb28 Fixed zmq_init(-1) issue 2012-03-29 00:47:17 -05:00
Pieter Hintjens
f26e4ab784 Simplified zmq_msg_get/set functions
* Return integer property
* Fixed up man pages, which were inaccurate
* Fixed test case
2012-03-21 14:19:40 -05:00
Pieter Hintjens
6e71a54b1e Fixed issues #337, #341, and #340
* Implemented new ctx API (_new, _destroy, _get, _set)
* Removed 'typesafe' macros from zmq.h
* Added support for MAX_SOCKETS (was tied into change for #337)
* Created new man pages
2012-03-19 19:41:20 -05:00
Pieter Hintjens
9ac40c47d7 Fixed issue LIBZMQ-333
- reverted commit 941be8d2175332cb720f390f93d07a0870db8824.
 - fixed zmq_device implementation for latest socket_base class
 - added back zmq_device.3 man page
2012-03-16 16:39:11 -05:00
boris@boressoft.ru
318ba8836f Add WinCE support.
* Added two new files: errno.hpp and errno.cpp. They are required to use errno functionality on WM.
* zmq.cpp, msg.h: removed inclusion of errno.h because it is included in zmq.h that is also included by .cpp.
* windows.hpp: process.h is included only for desktop builds.
* thread.cpp: on CE CreateThread is used instead of __beginthreadex
* socket_base.cpp, clock.cpp: on CE include cmnintrin.h instead on intrin.h
* signaler.cpp: on Windows should use special macro around event name (for unicode builds)
* err.hpp: make it include errno.hpp (my file) instead on errno.h when building for CE
* err.cpp: use FormatMessage when building for CE (because CE does not have ANSI API functions)
* zmq.h: do not include errno.h whe building for CE
* libzmq.vcproj: add tro new files
2012-03-14 19:12:28 +04:00
Mikko Koppanen
9a4fd8a305 Needs explicit cast on solaris 2012-02-17 21:55:06 +00:00
skaller
38e74c9e84 Remove thread safe socket stuff from C binding. 2012-02-18 02:34:18 +11:00
Mikko Koppanen
da1920d944 Revert NULL checks in the API 2012-02-17 09:48:04 +00:00
Pieter Hintjens
ccdb7a6305 Minor cleanups
* Fixed use of ssize_t in zmq_msg_t class
* Corrected error after merge, old reference to inner_fctname (broke build)
2012-02-16 15:55:18 -06:00
Chuck Remes
a457be315b Merge pull request #246 from pieterh/arguments
Return EFAULT if required arguments are null
2012-02-16 13:20:33 -08:00
Pieter Hintjens
3ee99ae81f Renamed scatter/gather methods, cleaned up source 2012-02-16 12:30:37 -06:00
Pieter Hintjens
02b81d42ce Changed return type of zmq_msg_size to ssize_t to allow error return 2012-02-16 12:25:58 -06:00
Pieter Hintjens
dc09da4569 Return EFAULT if required arguments are null 2012-02-16 12:25:17 -06:00
Mikko Koppanen
2f44faa7ce Merge pull request #247 from pieterh/sendrecv
Added zmq_msg_send/recv functions
2012-02-16 08:58:03 -08:00
Pieter Hintjens
d092f2615c Renamed peek/poke to get/set 2012-02-15 19:28:29 -06:00
Pieter Hintjens
dcc1725a90 Renamed zmq_getmsgopt to zmq_msg_peek
* Added zmq_msg_poke for orthogonality
* Added zmq_msg_more for simplicity
* Fixed up man pages and test program
2012-02-15 18:44:28 -06:00
Pieter Hintjens
fb4748f257 Added zmq_msg_send/recv functions 2012-02-15 15:37:35 -06:00
Pieter Hintjens
a50a8aa364 Revert "more checks for parameters of API functions"
This reverts commit e646ce43c155f9710aa4486abd2daf6d4a30ca5b.
2012-02-14 18:43:33 -06:00
Pieter Hintjens
a908ccbf35 Merge pull request #241 from skaller/master
provide type safe sockets and contexts
2012-02-13 08:55:58 -08:00
niXman
e646ce43c1 more checks for parameters of API functions 2012-02-12 20:10:52 +04:00
skaller
4807935605 Implement type safe sockets and contexts. 2012-02-12 10:15:51 +11:00
skaller
c3f7543ebe Fix uio support.
We have to use an incomplete type in the interface.
The definition of iovec is only in the implementation.
This appears to following existing practice in 0MQ.
It seems a bit flakey that zmq.h is not included in zmq.cpp,
which is normal practice to ensure the implementation matches
the specified interface. YMMV. I follow 0MQ style.
2012-02-08 13:15:47 +11:00
skaller
970a005399 Provide interface.
Also move iovec definition from implementation to interface.
Not clear to me at present if an incomplete type should
be used to avoid gratuitously including <sys/uio.h> in
the interface. The interface can't be used with this include.
2012-02-08 12:58:35 +11:00
skaller
383a49dadf Implement zmq_recvmmsg. 2012-02-08 11:45:36 +11:00
skaller
531835bba8 Implement zmq_sendv.
Posix style send multiple messages using scatter/gather array.
2012-02-08 03:20:25 +11:00
skaller
759b2e01fd Fix comments to conform to style guide. 2012-02-04 12:34:06 +11:00
skaller
520ad3c2d7 Set and arrange propagation of thread safe sockets flag.
We use a distinct context initialisation function to specify
all sockets derived therefrom will be thread safe.

However the inheritance is done exclusively in the C interface.
This is not really correct, but it is chosen to minimise
interference with the existing C++ code, including any
construct or other calls within the C++ code base.
Semantically the C++ code should be unchanged,
physically some data structures and extra methods are
provided by they're only used from the C binding.
2012-02-04 02:17:35 +11:00
skaller
988efbc73a Thread Safe Sockets.
1. Reorganise C API socket functions to eliminate bad practice
of public functions calling other public functions. This should
be done for msg's too but hasn't been in this patch.

2. Reorganise code in C API socket functions so that the
socket is cast on one line, the C++ function called on
the next with the result retained, then the result is returned.

This makes the code much simpler to read and also allows
pre- and post- call hooks to be inserted easily.

3. Insert pre- and post- call hooks which set and release
a mutex iff the thread_safe flag is on.

4. Add the thread_safe_flag to base_socket_t initialised to
false to preserve existing semantics. Add an accessor for
the flag, add a mutex, and add lock and unlock functions.

Note: as yet no code to actually set the flag.
2012-02-04 01:41:09 +11:00
Chuck Remes
93529d8c5d Add zmq_getmsgopt to the API
The new function allows to retrieve options (flags)
from zmq_msg_t.

Signed-off-by: Chuck Remes <cremes@mac.com>
Renamed from zmq_msg_flags to zmq_getmsgopt
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-11-06 14:03:51 +01:00
Martin Sustrik
ac7717b7b3 250bpm copyrights added
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-10-31 16:20:30 +01:00
Bernd Prager
52bab42212 Missing bracket added
Signed-off: Martin Sustrik <sustrik@250bpm.com>
2011-10-27 17:11:28 +02:00
Mikko Koppanen
0354d4d37f Added Android support
Signed-off-by: Mikko Koppanen <mkoppanen@php.net>
2011-08-15 19:09:04 +02:00
Martin Sustrik
3c3c0bfd1f Minor problems in MSVC build fixed
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-08-15 08:02:36 +02:00
Martin Sustrik
9196c48256 select version zmq_poll reports invalid FDs
Till now, passing invalid file descriptor to zmq_poll()
caused asseration. Now it returns error.

Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-08-14 14:23:16 +02:00
Martin Sustrik
5650743d9e MSVC build brought up to date
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-07-22 08:35:01 +02:00
Martin Sustrik
7298b5742f Includes in zmq.cpp cleaned-up
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-07-18 11:39:38 +02:00
Steven McCoy
18d8be5e92 Fix pollin on Cygwin.
Signed-off-by: Steven McCoy <steven.mccoy@miru.hk>
Signed-off-by: Martin Sustrik <sustrik@250bom.com>
2011-07-18 10:54:53 +02:00
Martin Sustrik
49df2f416c Fixes warning when compiling with MSVC on Win64
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-05-15 13:12:09 +02:00
Martin Sustrik
e0246e32d7 Message-related functionality factored out into msg_t class.
This patch addresses serveral issues:
1. It gathers message related functionality scattered over whole
   codebase into a single class.
2. It makes zmq_msg_t an opaque datatype. Internals of the class
   don't pollute zmq.h header file.
3. zmq_msg_t size decreases from 48 to 32 bytes. That saves ~33%
   of memory in scenarios with large amount of small messages.

Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-04-21 22:27:48 +02:00
Martin Sustrik
6191213a57 Code dealing with messages moved to msg.cpp
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-04-12 14:20:49 +02:00
Martin Sustrik
3b636d7d18 zmq_utils implementation moved to zmq_utils.cpp
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-04-12 10:00:29 +02:00
Martin Sustrik
e6fd193760 OpenPGM now doesn't redefine bool, we can drop the workaround
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-04-12 09:22:22 +02:00
Martin Sustrik
b96fe15bb6 Run-time checking for context & socket validity added
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-04-09 09:35:34 +02:00
Martin Sustrik
17fdb5e3a8 zmq_recv() returns size of the message even if it's truncated
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-03-27 09:50:25 +02:00
Martin Sustrik
82dbef360c Memory leak in zmq_recv fixed
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-03-26 11:05:55 +01:00
Martin Sustrik
fb27a000d9 send/recv was changed to send/recv/sendmsg/recvmsg
send/recv now complies with POSIX by using raw buffers instead
of message objects and by returning number of bytes sent/recvd
instead of 0/-1.

The return value is changed accordingly for sendmsg and recvmsg.

Note that related man pages will be fixed in a separate patch.

Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-03-24 11:53:55 +01:00
Martin Sustrik
941be8d217 zmq_device removed
Devices are basically applications on top of 0MQ stack. They
should reside in separate libraties.

Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-03-23 17:44:16 +01:00
Martin Sustrik
f5e6d67948 Timeout in zmq_poll is in milliseconds
The old timeout in microsecond haven't been compliant with
POSIX and was impractical at the same time.

Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-03-23 15:50:18 +01:00
Martin Sustrik
18b9ebea32 The copyrights in file headers updated.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-03-02 16:30:40 +01:00
Martin Sustrik
43e8868875 Added explicit error message in case of memory exhaustion
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-02-22 16:23:36 +01:00
Martin Sustrik
12486fecc4 Fix MSVC and SunStudio builds with OpenPGM
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-02-18 17:57:59 +01:00
Martin Sustrik
ba26cc9938 Build problem with OpenPGM and MSVC fixed
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-02-13 10:07:10 +01:00
Pieter Hintjens
14a0e147b2 Fixed win32 issue with WSAStartup
- ctx constructor was calling mailbox_t constructor implicitly
 - moved WSAStartup and WSACleanup to be outside constructor/destructor

Signed-off-by: Pieter Hintjens <ph@imatix.com>
2011-02-12 18:36:21 +01:00
Martin Sustrik
5dcbc34396 zmq_poll with no fds behaves decently
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-02-08 14:46:27 +01:00
Mikko Koppanen
8561a55d2c Remove unnecessary visibility pragmas
Signed-off-by: Mikko Koppanen <mkoppanen@php.net>
2011-01-20 22:12:25 +01:00
Martin Sustrik
8d6cafe066 All devices conflated into a single implementation.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2010-12-06 22:57:29 +01:00
Martin Lucina
c9584096e0 Control symbol exports using -fvisibility
On systems using GCC 4.0 or newer which support symbol visibility in shared
libraries, use -fvisibility=hidden and only export explict API functions
defined in zmq.cpp. We do not enable -fvisibility on MinGW since this uses a
separate mechanism (__declspec).

Signed-off-by: Martin Lucina <mato@kotelna.sk>
2010-11-25 17:12:31 +01:00
Martin Sustrik
f77c8ca47f Merge branch 'maint'
* maint:
  Couple of patches for AIX build
2010-11-13 18:16:13 +01:00
Martin Sustrik
ffcb0baa73 Couple of patches for AIX build
- RAND_bytes function resides in crypto library
- pollfd on AIX used 'reqevents' instead of events and 'retnevents'
  instead of 'revents'

Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2010-11-13 18:08:18 +01:00
Chia-liang Kao
a2500ae348 Fix a bug that zmq_poll's select backend spins when timeout=-1, due to
ptimeout not properly recalculated after first pass.

Signed-off-by: Chia-liang Kao <clkao@clkao.org>
2010-11-12 19:16:00 +01:00
Martin Sustrik
b358df9fff Name of "GNU Lesser Public License" corrected.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2010-10-30 15:08:28 +02:00
Steven McCoy
8d6979922e Changes for MSVC OpenPGM build.
Signed-off-by: Steven McCoy <steven.mccoy@miru.hk>
2010-10-23 14:35:02 +02:00
Martin Sustrik
8b8837688a Couple of bugs in zmq_poll fixed.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2010-10-16 17:56:25 +02:00
Martin Sustrik
72b15a6dae Implementation of zmq_strerror moved from zmq.cpp to err.cpp
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2010-10-16 16:05:34 +02:00
Martin Sustrik
cafcdbbe2b Safety measure in zmq_msg_close implemented
zmq_msg_close now empties the message on zmq_msg_close, thus not
leaving random data in the structure, that may be mistaken for
a valid message.

Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2010-10-14 09:34:09 +02:00
Martin Sustrik
e2167cecae Precise timouts in zmq_poll implemented
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2010-10-13 21:39:20 +02:00
Martin Sustrik
318cdd1f24 Merge branch 'maint'
* maint:
  Version macros added

Conflicts:
	builds/msvc/platform.hpp

Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2010-10-09 08:03:58 +02:00
Martin Sustrik
ef8db789a1 Version macros added
Macro ZMQ_VERSION represents the current version of 0MQ
Macro ZMQ_MAKE_VERSION(major,minor,patch) allows to create
a representation of the specified version.
The versions can be compared using simple <, >, ==, etc.
operators.

Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2010-10-09 07:53:24 +02:00
Martin Lucina
8f9080ebb9 zmq_poll(): Fix busy-loop if timeout is zero
Fix a case where zmq_poll() (poll-based version) could go off into a busy-loop
if no revents are returned and the timeout passed in is zero.
2010-09-30 15:30:24 +02:00
Steven McCoy
96d85b2098 * Add assertions to check for OpenPGM calls with invalid parameters.
* Assertion to check that pgm_getaddrinfo is actually returning something.
 * Missing pgm_connect call.
 * Typo on TOS causing immediate abort.
 * Placeholder calls for timeouts whilst continuing spin loop functionality.
 * OpenPGM v5 now supports reference counting so remove init checks.
 * Duplicate UDP unicast port setting, requires one unicast and one multicast.
 * Incorrectly set socket rcvbuf size with sndbuf.
 * Replace std::lexicographical_compare of TSI's with long word integer comparisons.
 * pgm_socket_t::receive returns -1 on no data.
2010-09-30 09:11:19 +02:00
Steven McCoy
00cd7d49c7 Upgrade to OpenPGM-5.0.78 2010-09-28 16:35:29 +02:00
Martin Sustrik
5dae27d0ed clock_t class added 2010-09-26 16:55:54 +02:00
Martin Sustrik
4d51a52874 zmq_poll (select version) now correctly assumes that ZMQ_FD is edge-trigerred 2010-09-20 17:25:04 +02:00
Martin Lucina
f49b77eedc zmq_poll honours ZMQ_FORCE_POLL and ZMQ_FORCE_SELECT options 2010-09-20 16:55:46 +02:00
Martin Lucina
1abfc92d26 minor problem in zmq_poll (select version) fixed 2010-09-20 16:45:25 +02:00
Martin Sustrik
a68e6739f4 when no I/O threads are available error is raised instead of assertion 2010-09-09 08:25:00 +02:00
Martin Sustrik
91ea204644 EINTR returned from the blocking functions 2010-09-08 08:39:27 +02:00
Ivo Danihelka
ae567be0c2 improved null checking in zmq_term 2010-09-04 16:58:29 +02:00
Martin Lucina
ca176121de Merge branch 'maint'
* maint:
  zmq::select_t, zmq_poll(): assert if FD_SETSIZE reached
  zmq.h: Fix typo and use of C99 comment

Conflicts:
	src/zmq.cpp
2010-09-04 16:24:21 +02:00
Martin Lucina
51a84c15de zmq::select_t, zmq_poll(): assert if FD_SETSIZE reached
Ensure that 0MQ does not attempt to call select() on more than FD_SETSIZE
file descriptors.
2010-09-04 16:12:33 +02:00
Martin Sustrik
035c937ee7 zmq_poll: account for the fact that ZMQ_FD is edge-triggered 2010-08-28 07:02:22 +02:00
Martin Sustrik
56faac7f19 zmq_poll returns prematurely even if infinite timeout is set - fixed 2010-08-27 15:01:38 +02:00
Ivo Danihelka
43f2c6ff5b improved null checking in zmq_term 2010-08-26 12:14:53 +02:00
Martin Sustrik
936dbf956b dezombification procedure fixed 2010-08-25 15:39:20 +02:00
Martin Lucina
ee1f1af009 zmq_poll(): Fix some corner cases
Trying to optimize out the case where items_[i]. events is 0 would
result in a bogus pollfds[i]. Similarly in the select()-based impl,
while not strictly necessary it's better to get ZMQ_FD even if
events is 0 since that detects ETERM and friends.
2010-08-25 15:39:20 +02:00
Martin Lucina
a85d1e51bf zmq_poll(): Rewrite to use ZMQ_FD/ZMQ_EVENTS pt2
Rewrite the select()-based zmq_poll() implementation to use
ZMQ_FD and ZMQ_EVENTS.

Also fix some corner cases: We should not pollute revents with
unrequested events, and we don't need to poll on ZMQ_FD at all
if a pollitem with no events set was passed in.
2010-08-25 15:39:20 +02:00
Martin Lucina
6b1ca2cb1e Fix whitespace
Dunno where those <TAB>s came from...
2010-08-25 15:39:20 +02:00
Martin Lucina
cd12508418 zmq_poll(): Rewrite to use ZMQ_FD/ZMQ_EVENTS pt1
Rewrite zmq_poll() to use ZMQ_FD and ZMQ_EVENTS introduced on the
wip-shutdown branch. Only do the poll()-based version of zmq_poll (), the
select()-based version will not compile at the moment.
2010-08-25 15:39:20 +02:00
Martin Sustrik
05d908492d WIP: Socket migration between threads, new zmq_close() semantics
Sockets may now be migrated between OS threads; sockets may not be used by
more than one thread at any time. To migrate a socket to another thread the
caller must ensure that a full memory barrier is called before using the
socket from the target thread.

The new zmq_close() semantics implement the behaviour discussed at:

http://lists.zeromq.org/pipermail/zeromq-dev/2010-July/004244.html

Specifically, zmq_close() is now deterministic and while it still returns
immediately, it does not discard any data that may still be queued for
sending. Further, zmq_term() will now block until all outstanding data has
been sent.

TODO: Many bugs have been introduced, needs testing. Further, SO_LINGER or
an equivalent mechanism (possibly a configurable timeout to zmq_term())
needs to be implemented.
2010-08-25 15:39:20 +02:00
Martin Lucina
b66dd7afd2 zmq_stopwatch_stop: Don't return EFAULT
Function returning unsigned long int cannot return (-1)
2010-08-25 09:50:45 +02:00
Pieter Hintjens
b6cdd369e3 Added error checking (EFAULT) for null arguments
* Fixed zmq_term, zmq_socket, zmq_close, zmq_setsockopt,
* zmq_getsockopt, zmq_bind, zmq_connect, zmq_send,
* zmq_recv, zmq_poll, zmq_device, zmq_stopwatch_stop
* Updated Reference Manual for these methods
2010-08-08 11:43:32 +02:00
Pieter Hintjens
677b3d906a Added not-null assertions on pointer arguments in C API functions
* zmq_term
* zmq_socket
* zmq_close
* zmq_setsockopt
* zmq_getsockopt
* zmq_bind
* zmq_connect
* zmq_send
* zmq_recv
* zmq_poll
* zmq_device
* zmq_stopwatch_stop
2010-08-07 20:55:07 +02:00
Martin Sustrik
cff7ba2315 Windows build fixed 2010-06-17 17:09:51 +02:00
Martin Sustrik
7f01e9970d stopwatch returned to libzmq 2010-06-17 16:51:53 +02:00