When (X)SUB socket is being shut down there may be pending
outbound subscription commands in the pipes. In such case
we want to close the socket immediately instead of waiting
for the commands to be sent.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
When polling on XREP socket in incoming message part was prefetched,
but not the identity of sender. The problem is fixed by this patch.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
These include configurations for both Win32 and x64 platforms. All project
settings have been normalised in property sheets (the ".props" files under
builds/msvc/properties) to simplify maintenance. Build artefacts are all
generated in platform-specific subfolders of bin, lib and obj directories.
Also enables the use of precompiled headers with MSVC10.
This significantly reduces the time required to compile libzmq with Visual
Studio on Windows. It should have no impact on other platforms.
Signed-off-by: Stuart Webster <sw_webster@hotmail.com>
failed: s == retired_fd (ipc_connecter.cpp:174), as reported in LIBZMQ-294.
This patch fixes the bug, and also an identical problem in tcp_connecter
which has not hit people since TCP connect() usually completes via the
asynchronous code path (poll, out_event).
Signed-off-by: Martin Lucina <martin@lucina.net>
Mercurial does not have built-in support for converting line-endings. This is a
settings file for hg eol (http://mercurial.selenic.com/wiki/EolExtension), an
extension that replicates the behaviour of git with core.autocrlf=true.
Mercurial uses Python regex syntax by default in its .hgignore files. Adding
this line to .gitignore overrides that setting, so hg-git users can just create
a hardlink to it (e.g "mklink /H .hgignore .gitignore" on Windows) to use it.
Signed-off-by: Stuart Webster <sw_webster@hotmail.com>
libzmq master (3.1) is not ABI compatible with libzmq 2.1.x or 3.0 (removed
functionality), hence the ABI version needs to be set to 3.
Signed-off-by: Martin Lucina <martin@lucina.net>
Older versions of gcc have problems with in-line forward declarations
when there's a naming conflict with a global symbol.
Signed-off-by: AJ Lewis <aj.lewis@quantum.com>
Expand the original patch to all such forward declarations.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
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>
When there were both '0' and '255' subnodes in (mtrie)
the removal of the node resulted in an infinite loop.
Fixed.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
This version downgrade is done because of the previous refatoring.
It removed all the new features and reintroduced some of the old
ones (identities). Thus, it made trunk much closer to existing 3.0
branch than it used to be.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
Previous patches have missed the case when the identity should
be sent from an inproc endpoint. Fixed.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
However, the "durable socket" behaviour wasn't re-added.
Identities are used solely for routing in REQ/REP pattern.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
When zmq::req_t::xrecv detects that a response has no request ID
label, or the ID is the wrong size, it would return an EAGAIN, but
would not discard the remainder of the message. This could allow the
remainder of the message to incorrectly "leak" into a future response,
if it is crafted to look like a reply with a valid response ID.
Discard all remaining message blocks, if the ID is invalid in any way.
This patch changes the Win32 version to call RaiseException instead of abort
(which eventually calls TerminateProcess). This allows crash dumps to be sent
correctly instead of the process disappearing.
Signed-off-by: Paul Betts <paul@paulbetts.org>
This patch is meant to prevent users from running out of memory
when using 0MQ in the default configuration.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
It was accidently lost in commit fcfad5682e, equivalent
to commits 2ddb106 & b62dd40 in version 2.1. Changes semantics
from TXW_MAX_RATE to ODATA_MAX_RATE.
Signed-off-by: Steven McCoy <steven.mccoy@miru.hk>
Aside of fixing couple of corner cases this patch turns the 'match'
function in mtrie from recursive to iterative.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
This patch adds support for checking messages as they arrive
(as opposed to when they are recv'd by the user) and drop
the connection if they are malformed.
It also uses this new feature to check for validity of inbound
messages in REQ socket.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
This is a preliminary patch allowing for socket-type-specific
functionality in the I/O thread. For example, message format
can be checked asynchronously and misbehaved connections dropped
straight away.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
If several of the outbound pipes become passive while sending
a single message, the refcount on the message is adjusted
once only, not multiple times. It's an atomic operation so
the cost is not negligible.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
When exec is executed to start a different process image old
0MQ file descriptors could stay open, thus blocking TCP ports
and alike. This patch should solve the problem.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
zmq_msg_t being defined as unsigned char[32] could not be stored
in STL containers. Fixed by this commit.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
On win64 the size of file descriptor is not the same as size of int.
The bug in PGM transport caused a runtime error because of this.
The problem is fixed now.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
The engine was not used exclusively for TCP connections.
Rather it was used to handle any socket with SOCK_STREAM
semantics. The class was renamed to reflect its true function.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>