Age | Commit message (Collapse) | Author |
|
Optimisation. Up to now new fd_set was initialised in
each signaler_wait call. Now the fd_set is initialised
once when signaler is created. This is useful espacially on
Windows where fd_set is list of pointers rather than bitset
and thus can be rather large.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
|
|
This patch provides a single place for selecting polling mechanisms
(polling.hpp). Up to now the selection was spread among the build
system and several source files.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
|
|
All polling systems are now checked and corresponding macros set
accordingly (e.g. detection of a working poll() function will define
XS_HAVE_POLL). Additionally if the user selects a specific polling
system via the --with-poller switch a corresponding XS_FORCE_* macro
will be defined. The select() and poll() tests now conditionally include
headers which makes them more robust on various target platforms.
Signed-off-by: Gabriele Svelto <gabriele.svelto@gmail.com>
|
|
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
|
|
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
|
|
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
|
|
This patch allows for partial shutdown of the socket.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
|
|
It turns out the GitHub is not able to format Asciidoc footnotes.
This patch handles the footnotes manually.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
|
|
SURVEYOR socket now uses clock instance from socket_base_t
for measuring survey timeout. This allows for better performance
in tight xs_recv() loops.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
|
|
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
|
|
This fixes a critical bug in zmq_getsockopt.
|
|
This patch instantiate a clock_t instance for each XS
socket. Thus, it is shared between subsequent calls
to xs_recv (and xs_send). That in turn significantly
limits the number of invocations of getimeofday (or similar)
when timeouts are used and recv/send is called in a
tight loop.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
|
|
Improvement to the "survey" test
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
|
|
This is an optimisation. The idea is that when surveyor disappears
it makes no sense to process any surveys it have sent. There are
two cases handled:
- when (X)SURVEYOR socket is closed any unsent outbound messages
are discarded
- when (X)RESPONDENT detects that its peer have disconnected it
drops any unprocessed messages that have been received from it
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
|
|
Signed-off-by: Gabriele Svelto <gabriele.svelto@gmail.com>
|
|
It can be used to timeout the survey. Value is in milliseconds
and -1 means infinite (default).
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
|
|
Survey pattern is "multicast with reply". There are two roles:
surveyor and respondent. Surveyor publishes a survey which gets
delivered to all connected respondents. Each repondent can send
a response to the survey. All the responses are delivered to
the original surveyor. Once the surveyor decides that the survey
is over (e.g. deadline was reached) it can send initiate survey.
Late responses from old surveys are automatically discarded by
the surveyor socket.
Socket types: SURVEYOR, XSURVEYOR, RESPONDENT, XRESPONDENT
Patch also includes a test program with surveoyr, two respondents
and an intermediary device.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
|
|
|
|
- couple of comments adjusted
- empty 'stack delimiter' message correctly closed
- non-reachable function xrep_t::rollback() removed
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
|
|
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
|
|
Signed-off-by: Gabriele Svelto <gabriele.svelto@gmail.com>
|
|
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
|
|
POSIX threads support is checked using the AX_PTHREAD macro, this
provides improved support and coverage of different platforms. The M4
macros are also moved into the M4 directory.
Signed-off-by: Gabriele Svelto <gabriele.svelto@gmail.com>
|
|
While --with-poller configure option could be used for selecting
the polling mechanism for I/O threads (asynchronous), synchronous
polling (xs_poll, signaler_t) was not affected by the option.
This patch uses selected mechanism is it is either 'select' or 'poll'.
Othrwise it chooses the mechanism according to the platform.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
|
|
Fixed a couple of mixed signed/unsigned comparison which in conjunction
with -Werror prevented compilation of the test.
Signed-off-by: Gabriele Svelto <gabriele.svelto@gmail.com>
|
|
thread_t is one of the classes where C++ syntax creates more
problems then it solves. This patch converts it into simple
C-style pseudo-class.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
|
|
Till now the subscription, as specified by the user, was send
upstream.
This patch allows SUB-side filter to transform the user subscription
into wire subscription. For example, only a has can be sent upstream
instead of a perfect subscription.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
|
|
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
|
|
This patch propoagates the error from signaler and mailbox
initialisation up the stack.
To achieve this signaler and mailbox classes were re-written
is C-like syntax.
Finally, shutdown_stress test now ignores EMFILE/ENFILE errors.
Thus, the tests should pass even on OSX which sets the max
number of file descriptors pretty low by default.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
|
|
- subscription forwarding is handled by XSUB socket
- filtering is handled by SUB sockets
- subscriptions are decoupled from filter engines
- filter doesn't have to be able to enumarate the subscriptions
(no sf_enumerate function)
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
|
|
Define _GNU_SOURCE in addition to the __BSD_VISIBLE on the freebsd-like
hosts. It made in hope to cover cases and obtain the full power of
underlying kernel on "hybrid" systems like Debian GNU/kFreeBSD, when
GLibc (or derived) library lives on top of FreeBSD kernel.
On the "real" FreeBSD it only enables getline(3), and therefore, should
not hurt.
* configure.ac: Define _GNU_SOURCE in addition to the __BSD_VISIBLE for
cover GLibc (or derived) on top of FreeBSD kernel cases, as it is in
Debian GNU/kFreeBSD case.
|
|
* src/stream_engine.cpp (stream_engine_t::stream_engine_t):
Use
#ifdef SO_NOSIGPIPE
instead of
#if defined XS_HAVE_OSX || defined XS_HAVE_FREEBSD
|
|
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
|
|
This patch introduces 1/2 second tolerance for the timeouts in the tests.
This will hopefully make tests not fail even on slow or heavily loaded
machines.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
|
|
This patch consolidates the up-to-now scattered code that
sets different options on newly created sockets.
There are open_socket and open_tcp_socket functions that
do the tuning automatically.
In case the socket is not created but got from elsewhere
(such as accept() call) there are tune_socket and tune_tcp_socket
functions that will do the tuning.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
|
|
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
|
|
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
|
|
On Windows, HANDLE_FLAG_INHERIT is equivalent to
O_CLOEXEC on UNIX.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
|
|
on laggy networks
|
|
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
|
|
Signed-off-by: Gabriele Svelto <gabriele.svelto@gmail.com>
|
|
The /dev/poll facility wasn't correctly recognized because of a missing
header. The check was fixed and overhauled in the process.
Signed-off-by: Gabriele Svelto <gabriele.svelto@gmail.com>
|
|
While TCP and IPC socket duplicates are correctly closed on
fork+exec, file descriptors used for internal communication
within libxs are not. This patch fixes the problem.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
|
|
If accept() call fails due to insuffient OS resources
the new connection is rejected.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
|
|
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
|
|
The socket connecting using the inproc transport never
received the identity of the remote peer.
|
|
The scoket implementation for inproc transfer failed to flush
identity message. The result was that the identity message
was not delivered until after the user sent the first message.
The identity message was never delivered if the user
used the socket only to receive messages.
|
|
|
|
libxs (as opposed to libzmq) requires at least one I/O thread per
context. Thus, "no I/O thread available" error doesn't make sense
anyome.
This patch removes the code and the documentation.
It keeps the definition of EMTHREAD itself for backward compatibility.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
|
|
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
|