Commit Graph

323 Commits

Author SHA1 Message Date
Martin Sustrik
0f6f7276e3 Move the pipe termination code to socket_base_t
So far, the pipe termination code was spread among socket type
classes, fair queuer, load balancer, etc. This patch moves
all the associated logic to a single place.

Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-05-23 20:30:01 +02:00
Martin Sustrik
acf0b0e515 Introduces bi-directional pipes
So far, there was a pair of unidirectional pipes between a socket
and a session (or an inproc peer). This resulted in complex
problems with half-closed states and tracking which inpipe
corresponds to which outpipe.

This patch doesn't add any functionality in itself, but is
essential for further work on features like subscription
forwarding.

Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-05-22 17:26:53 +02:00
Martin Sustrik
b2eb84f8ca Substantial simplification of uuid_t
The string format of UUID is not used in 0MQ. Further on,
it turns out that UUIDs have fixed microarchitecture-agnostic
binary layout (see RFC4122). Thus, the conversion to string
and back to binary can be avoided.

Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-04-29 07:19:22 +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
581697695a Message validity is checked in the runtime
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-04-19 08:08:15 +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
abb184a051 ZMQ_NOBLOCK renamed ZMQ_DONTWAIT
Done because of POSIX compliance

Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-03-26 10:38:40 +01:00
Martin Sustrik
bc4a1ce334 ZMQ_HWM split into ZMQ_SNDHWM and ZMQ_RCVHWM
These new options allow to control the maximum size of the
inbound and outbound message pipe separately.

Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-03-24 16:47:33 +01:00
Martin Sustrik
507718ee1a ZMQ_HWM type changed to int
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-03-24 15:43:03 +01:00
Martin Sustrik
d61f067f5b ZMQ_EVENTS type changed to int
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-03-24 15:07:23 +01:00
Martin Sustrik
23bd3726a5 ZMQ_RCVMORE type changed to int
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-03-24 14:59:43 +01:00
Martin Sustrik
8463b4d55e SWAP functionality removed
On-disk storage should be implemented in devices rather than
in 0MQ core. 0MQ is a networking library and there's no point
in storing network buffers on disk.

Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-03-24 12:27:06 +01:00
Martin Sustrik
32ded2b457 Duplicate identities now checked with zmq_connect
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-03-16 13:26:23 +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
4c7446211a Explicit identities bug in inproc transport fixed.
The identity of bound socket was not used. Instead, transient
identity was generated.

Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-03-01 16:08:40 +01:00
Martin Sustrik
d4e418f5f4 Socket with no owner objects is deallocated immediately
Till now the deallocation of such socket was delayed
till zmq_term() thus creating a "leak".

Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-02-25 08:58:01 +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
5b82b1ba30 Reaper thread waits for commands rather them retrieving them periodically
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-02-09 22:23:21 +01:00
Martin Sustrik
80ac398bba Initial implementation of reaper thread.
Reaper thread destroys the socket asynchronously.
zmq_term() can be interrupted by a signal (EINTR).
zmq_socket() will return ETERM after zmq_term() was called.

Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-02-09 15:32:15 +01:00
Martin Sustrik
1b15eba9a9 Fixed the problem of subscription forwarding and PGM interaction
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-01-28 07:50:21 +01:00
Martin Sustrik
bd0ba6e89a Size of inproc hwm and swap is sum of peers' hwms and swaps
The meat of the patch was contributed by Douglas Creager.
Martin Sustrik implemented storing peer options in inproc
endpoint repository.

Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-01-10 13:53:30 +01:00
Martin Sustrik
472bdcd6b4 Return ETERM from getsockopt(ZMQ_EVETS) if zmq_term() was called
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-01-05 16:57:51 +01:00
Dhammika Pathirana
f749f2d21c add basic uri validations
Signed-off-by: Dhammika Pathirana <dhammika@gmail.com>
2010-12-13 15:40:26 +01:00
Martin Sustrik
c80e7b80cc XPUB and XSUB socket types added.
These are just placeholders. At the moment XPUB behaves th same
as PUB and XSUB as SUB.

Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2010-12-04 23:14:38 +01:00
Martin Sustrik
8abe67357a Merge branch 'maint'
* maint:
  Fix socket_t::recv() hang scenario where initial call to process_commands() eats signal

Conflicts:
	src/socket_base.cpp
2010-11-12 14:47:26 +01:00
Marc Rossi
f7123de943 Fix socket_t::recv() hang scenario where initial call to process_commands() eats signal
Added block boolean var to second process_commands() invocation for blocking sockets
instead of always using true.  This prevents the process_commands() call from hanging
when a message is received with an empty queue after the call to xrecv() but
prior to the initial call to process_commands() invoked when ++ticks == inbound_poll_rate.

Signed-off-by: Marc Rossi <mrossi19@gmail.com>
2010-11-12 14:38:25 +01:00
Martin Sustrik
9da84a5239 signaler renamed to mailbox
For historical reasons queue to transfer commands between
threads was called 'signaler'. Given that it was used to
pass commands rather than signals it was renamed to 'mailbox',
see Erlang mailboxes.

Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2010-11-05 17:39:51 +01:00
Martin Sustrik
9cfdb441f4 slots renamed to tids
Threads were so far identified by integers called 'slots'.
This patch renames them to more comprehensible 'tid's (thread IDs).

Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2010-11-05 16:38:52 +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
Martin Sustrik
0a03e86e95 ZMQ_LINGER socket option added.
1. ZMQ_LINGER option can be set/get
    2. options are part of own_t base class rather than being declared
       separately by individual objects
    3. Linger option is propagated with "term" command so that the
       newest value of it is used rather than the stored old one.
    4. Session sets the linger timer if needed and terminates
       as soon as it expires.
    5. Corresponding documentation updated.

Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2010-10-16 10:53:29 +02:00
Martin Sustrik
b7386f5b50 To insert to associateive STL containers value_type used instead of make_pair
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2010-10-14 12:13:52 +02:00
Martin Sustrik
5dae27d0ed clock_t class added 2010-09-26 16:55:54 +02:00
Martin Sustrik
7d5061798c Merge branch 'maint'
* maint:
  if TSC jumps backwards (in case of migration to a different CPU core) latency peak may occur -- fixed

Conflicts:
	src/app_thread.cpp
2010-09-26 13:36:05 +02:00
Martin Sustrik
9c11886600 The flag in the socket has clear semantics now -- it tracks whether corresponding context was closed, it doesn't track whether zmq_close was called on the socket itself 2010-09-21 09:00:46 +02:00
Martin Sustrik
0c215fada4 potential duplicate termination of pipes removed 2010-09-18 06:42:46 +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
Martin Sustrik
651c1adc80 sys transport introdced; inproc://log moved to sys://log 2010-09-01 15:24:46 +02:00
Martin Sustrik
fba90af8a7 Issue 54 - socket_base.cpp:162 comparison error 2010-08-30 12:10:40 +02:00
Martin Sustrik
42000d2c4f terminology unified: revive->activate 2010-08-28 10:15:03 +02:00
Martin Sustrik
92923cd40b bug in pipe deactivation fixed 2010-08-28 08:44:12 +02:00
Martin Sustrik
b608c19c5a MSVC build fixed 2010-08-25 15:39:21 +02:00
Martin Sustrik
9b8993efb4 elementary fixes to the named session 2010-08-25 15:39:21 +02:00
Martin Sustrik
43e34d0281 engine leak fixed; pgm compilation fixed 2010-08-25 15:39:20 +02:00
Martin Sustrik
45f83d78a5 one more dezombification bug fixed 2010-08-25 15:39:20 +02:00
Martin Sustrik
936dbf956b dezombification procedure fixed 2010-08-25 15:39:20 +02:00
Martin Sustrik
d13933bc62 I/O object hierarchy implemented 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 Hurton
ca057c7db8 Fix identity generation for transient inproc connections 2010-07-10 23:02:50 +02:00
Martin Hurton
fca2e8e8cc Add SWAP support 2010-06-21 15:06:51 +02:00
Martin Sustrik
9151de3895 generate identity for transient inproc connections 2010-06-17 11:01:18 +02:00
Brian Buchanan
ac90b7e0ba issue 35 - ZMQ_RCVMORE sometimes erroneously returns false 2010-06-11 08:03:34 +02:00
Martin Sustrik
8408ae066d LWM is computed rather than explicitly specified by user 2010-05-25 15:03:57 +02:00
Martin Sustrik
835e893e54 dispatcher_t class renamed to ctx_t 2010-05-05 14:24:54 +02:00
Martin Sustrik
fba28c7c0c issue 1 - Change zmq_term semantics 2010-04-11 16:36:27 +02:00
Martin Sustrik
00cf3ceb8d multi-part message functionality available via ZMQ_SNDMORE and ZMQ_RCVMORE 2010-04-11 10:26:47 +02:00
Martin Sustrik
716f4ac871 zmq_getsockopt function added 2010-04-09 13:04:15 +02:00
Martin Sustrik
2f219d7c28 ZMQ_TBC renamed to ZMQ_MORE 2010-03-27 21:25:40 +01:00
Martin Sustrik
842b4dd2e4 muti-part message functionality available via API 2010-03-27 14:57:56 +01:00
Martin Sustrik
61ad236e95 ZMQ_NOFLUSH and zmq_flush obsoleted 2010-03-13 14:40:10 +01:00
Martin Hurton
61ee6fae53 Implement flow control
This commit introduces the necessary changes necessary
for implementing flow control. None of the socket types
implements the flow control yet. The code will crash when
the flow control is enabled and the thw lwm is reached.

The following commits will add flow-control support for
individual socket types.
2010-03-12 11:07:38 +01:00
Martin Lucina
27e2d08449 Restructure language bindings
C and C++ headers moved from bindings/ to include/, bindings/ removed
--with-c and --with-cpp options to configure removed, C and C++ now built
and installed by default
2010-03-11 20:33:27 +01:00
Martin Sustrik
d790940fd0 udp transport renamed to epgm 2010-03-09 18:14:49 +01:00
Martin Sustrik
aff1f6621a Merge branch 'master' of git@github.com:sustrik/zeromq2 2010-02-19 15:25:05 +01:00
Martin Sustrik
d008637bc4 one more attempt to fix the previous win32 problem 2010-02-17 21:16:59 +01:00
Martin Sustrik
e385319e5a recv returning -1 while errno=0 fixed 2010-02-17 20:33:00 +01:00
Martin Sustrik
b9caa319e2 Multi-hop REQ/REP, part XI., finalise the XREQ/XREP functionality 2010-02-16 18:30:38 +01:00
Martin Sustrik
43620b3d35 Multi-hop REQ/REP, part X., optional delayed creation of pipes during connect 2010-02-14 13:34:48 +01:00
Martin Sustrik
4405250d93 Multi-hop REQ/REP, part IX., pass the peer identity as far as socket_base_t 2010-02-13 15:30:03 +01:00
Martin Sustrik
f5ce81f289 Multi-hop REQ/REP, part VIII., new blob_t type used for holding identity 2010-02-13 14:07:30 +01:00
Martin Sustrik
cdc2efe9b5 Multi-hop REQ/REP, part VII., identity-related algorithms rewritten 2010-02-13 13:07:33 +01:00
Martin Hurton
dc8f4b1b76 Fix memory leak in bind() 2010-02-12 15:20:43 +01:00
Martin Hurton
cd7300fd4f Resolve command starvation in recv() 2010-02-12 12:53:19 +01:00
Martin Sustrik
427bc3276a minor code cleanup 2010-02-07 16:24:14 +01:00
Martin Sustrik
2bb57ac57a ZMQII-39: Implement IPC transport 2010-01-15 14:11:39 +01:00
Martin Sustrik
067ba3b9f7 ZMQII-34: ensure that poll won't return POLLIN event when the message will be filtered out anyway (POSIX) 2010-01-13 19:21:23 +01:00
Martin Sustrik
4f6baf4dde Copyrights transferred from FastMQ to iMatix 2010-01-05 08:29:35 +01:00
Martin Sustrik
72161fb075 format of subscriptions changed (no * needed anymore) 2009-12-28 21:29:31 +01:00
Martin Sustrik
aebff623f3 ZMQII-28: Bidirectional introduction on TCP connection establishment 2009-12-23 19:37:56 +01:00
Martin Sustrik
8aa0908635 all news converted to nothrow variant 2009-12-15 23:49:55 +01:00
Martin Sustrik
7146ef85e9 seqnum mechanism automated 2009-12-02 21:26:47 +01:00
Martin Sustrik
9bd309bda6 annoying optimisation in 'bind' command removed 2009-12-01 18:50:54 +01:00
Martin Sustrik
c41daca3da race condition in inproc transport shutdown fixed 2009-11-21 21:30:09 +01:00
Martin Sustrik
64634605b3 obsolete parameter removed from 'bind' command 2009-11-21 21:13:29 +01:00
Martin Sustrik
0e9ab2e8a3 inproc transport - initial commit 2009-11-21 20:59:55 +01:00
Martin Sustrik
cc631c4c66 ZMQII-18: Implement I/O multiplexing (first approximation) 2009-10-01 10:56:17 +02:00
malosek
cf6cc0128f pgm2 receiver working (partly) 2009-09-25 17:50:12 +02:00
malosek
33afdcd1ad added --with-pgm2 into build system 2009-09-24 12:43:35 +02:00
Martin Sustrik
e136d923b7 ZMQ-specific error codes added 2009-09-22 11:52:35 +02:00
Martin Sustrik
b15f695976 different fixes to req/rep 2009-09-21 17:20:13 +02:00
Martin Sustrik
cb1b6fe32c initial version of req/rep sockets 2009-09-21 14:39:59 +02:00
malosek
dffbdbb60c fixed compiler warning cast from uint64 to bool in socket_base.cpp 2009-09-17 11:31:28 +02:00
malosek
1b2a426656 c and cpp directories moved into bindings directory 2009-09-16 16:49:09 +02:00
malosek
03d494d4f0 added udp:// transport prefix for PGM UDP encapsulation 2009-09-16 15:36:38 +02:00
malosek
7a5db6041f added newly added socket options to all language bindings, P2P model changed to PUB/SUB for throughput tests 2009-09-16 12:22:36 +02:00
Martin Sustrik
9c522dccaf reconnect added to zmq_connecter 2009-09-16 11:02:18 +02:00
malosek
969522bbf5 added OpenPGM receiver - ZMQ_SUB 2009-09-16 10:11:01 +02:00
malosek
364281343c Merge branch 'master' of git@github.com:sustrik/zeromq2 2009-09-15 09:44:44 +02:00
malosek
bdf22e9c2f deleted useles iostream include from socket_base.cpp 2009-09-15 09:43:42 +02:00
Martin Sustrik
37cacc5700 ZMQII-1: Win32 - failure on shutdown 2009-09-14 12:28:13 +02:00
Martin Sustrik
c806aabb2d java binding sets socket options using setsockopt function 2009-09-14 11:25:57 +02:00
malosek
1a4d6f9119 added OpenPGM sender - ZMQ_PUB 2009-09-11 17:58:37 +02:00
Martin Sustrik
e940878b3f build on win32 fixed 2009-09-11 16:59:47 +02:00
Martin Sustrik
42ad2aa02d ZMQII-7: Pipe detach fails on shutdown 2009-09-11 15:51:35 +02:00
Martin Sustrik
b3f32e219e ZMQII-3: cheap and nasty implementation of message filtering 2009-09-10 12:00:47 +02:00
malosek
b71c3005e6 include directory split into c and cpp dirs, added --with-c and --with-cpp configure options 2009-09-07 17:06:47 +02:00
Martin Sustrik
4307baf7bc python binding functional 2009-09-04 16:02:41 +02:00
Martin Sustrik
4914e5c9d1 O(1) socket removal 2009-09-02 16:16:25 +02:00
Martin Sustrik
6a5120b1f1 python extension & perf tests 2009-09-02 10:22:23 +02:00
Martin Sustrik
cb09c6951e pipe deallocation added 2009-08-28 16:51:46 +02:00
Martin Sustrik
99c5d92836 pipes added 2009-08-27 10:54:28 +02:00
Martin Sustrik
6be4b01437 session management implemented 2009-08-21 14:29:22 +02:00
Martin Sustrik
a801b6d8b3 couple of bugs in shutdown mechanism fixed 2009-08-20 11:32:23 +02:00
Martin Sustrik
131f2e3096 subscribe API removed 2009-08-17 14:07:34 +02:00
Martin Sustrik
059beca59d listener/connecter/init/session added 2009-08-12 09:40:16 +02:00
Martin Sustrik
9f1f823b7b zmq_listener/zmq_connecter implemented 2009-08-09 16:12:09 +02:00
Martin Sustrik
3147ff8523 getsockopt implemented 2009-08-09 11:57:21 +02:00
Martin Sustrik
bde396f156 fix to 3-thread synchronisation algorithm 2009-08-09 11:21:47 +02:00
Martin Sustrik
5b5b513330 socket options interface modeled as in BSD sockets 2009-08-09 09:24:48 +02:00
Martin Sustrik
a8b410e66c lockfree interaction patter for 3 theads implemented 2009-08-08 16:01:58 +02:00
Martin Sustrik
0b5cc026fb clean up - session/socket/engine stuff removed 2009-08-06 12:51:32 +02:00
Martin Sustrik
cc3755a16f renamed from zs to zmq 2009-08-03 11:30:13 +02:00
Martin Sustrik
4ed70a9302 initial commit 2009-07-29 12:07:54 +02:00