77 Commits

Author SHA1 Message Date
Michel Pelletier
b84d0119b5 Ported from libxs revision 123c0f5387ecef287dd11f4dc790fb76ee1c0f67
Handle insufficient resources on accept() decently

    If accept() call fails due to insuffient OS resources
    the new connection is rejected.
2012-09-30 11:52:43 -07:00
Lourens Naudé
759d453368 Significantly reworked the monitoring infrastructure with a more granular per socket API and to play well with monitoring endpoints in application threads 2012-09-21 12:53:31 +01:00
Arthur O'Dwyer
3b984d40e9 Silence all "unused parameter" warnings from Clang.
Compiling without warnings is a good goal, because it makes
new warnings (which probably indicate bugs) stand out rather
than getting lost in the spam.

My fixes fall into two categories:

    - Adding (void) casts of unused parameters, where their
      unusedness seems like a TODO (or in some cases a bug?).

    - Removing parameter names altogether, where the function
      is clearly a stub that will never use its parameters.

Should be no change in behavior.
2012-08-27 16:05:51 -07:00
Ian Barber
95c018c0d3 Use full endpoint string in monitor response
The endpoint was excluding the tcp://, causing tests to fail
2012-08-26 16:29:40 +01:00
Lourens Naudé
9dc248f6ab Fix invalid address metadata for ZMQ_EVENT_DISCONNECTED 2012-08-04 11:41:33 +01:00
Martin Hurton
c84ca01e95 Be more conservative about when to generate ZMQ_EVENT_CLOSE_FAILED
This also fixes a bug in tcp_connecter and tcp_listener, which
generated the event not when they failed to close the socket but
when the succeed to close it.
2012-07-11 19:02:31 +02:00
Martin Hurton
75d67286cc {tcp|ipc}_listener: close socket when set_address () fails 2012-06-13 14:49:43 +02:00
Ian Barber
eb14890d23 Revert "Revert "Merge branch 'master' of github.com:ianbarber/libzmq""
This reverts commit 029d3dfae2c2bf9e10c7f05d78593f481569bbd7.
2012-06-12 14:43:18 +01:00
Ian Barber
bdd4e1351d Revert "Revert "Merge branch 'master' of github.com:zeromq/libzmq""
This reverts commit dde69fb9fb928db1850eb209db7aed79e26777fb.
2012-06-12 14:28:32 +01:00
Ian Barber
029d3dfae2 Revert "Merge branch 'master' of github.com:ianbarber/libzmq"
This reverts commit 33459029793474d14cdb48f85ad2c58dc7ed156f, reversing
changes made to 889b0e6f29f0cce566339b13b8a44f3b97836b6e.
2012-06-12 14:13:17 +01:00
Ian Barber
dde69fb9fb Revert "Merge branch 'master' of github.com:zeromq/libzmq"
This reverts commit 7b10586558268479e62ed901f3d8d76916bc6c8a, reversing
changes made to 33459029793474d14cdb48f85ad2c58dc7ed156f.
2012-06-12 14:12:03 +01:00
Martin Hurton
3ec8e576d9 Fix race conditions in {tcp,ipc}_connecter
Once the object has been terminated, it is unsafe for this object
to refer to its parent.

The bug was responsible for occasional
test_shutdown_stress failures.
2012-06-12 01:47:31 +02:00
Hiten P
db13fbf4a9 Consolidate TCP-specific common code into their own files.
The TCP keepalive tuning code has been moved into the newly added
files; this also allows future TCP-specific code to be added into
these files, without bloating the IP level code and establishes a
known file structure for other IP-based transports.

Remember: this is a no-op change, hence no API or functionality
was changed as part of this commit.
2012-06-08 18:18:52 +01:00
AJ Lewis
97c48ccda6 Fix build on HPUX 11iv3
The socket length variable for getsockname and accept must be an
(int *) instead of a (socklen_t *) on HPUX.

Signed-off-by: AJ Lewis <aj.lewis@quantum.com>
2012-06-05 09:44:02 -05:00
Martin Hurton
13ef1e4f26 Make wsa_error_to_errno pure function 2012-05-27 16:10:19 +02:00
Lourens Naudé
d0461752ff Merge branch 'master' into events 2012-05-11 22:08:17 +01:00
unknown
5fe6ddfda3 On Windows, preventing sockets to be inherited by child processes. 2012-05-07 15:46:55 +02:00
Lourens Naudé
5c6f72c17c ZMQ_MONITOR socket option registers a callback / event sink for changes in socket state 2012-05-04 02:32:46 +01:00
Sergey KHripchenko
057fab09a8 fixes for zmq_unbind() / zmq_disconnect() usage corner cases
1. when we call zmq_bind()/zmq_connect() to create endpoint
we send ourselfs(through launch_child()) command to process_own(endpoint)
(and add it to own_t::owned)
in the application thread we could call zmq_unbind() / zmq_disconnect() _BEFORE_
we run process_own() in ZMQ thread and in this situation we will be unable to find it in
own_t::owned. in other words own_t::owned.find(endpoint) will not be deleted but it will be deleted from
socket_base_t::endpoints.

2. when you zmq_unbind() the lisnening TCP/IPC socket was terminated only in destructor...
so the whole ZMQ_LINGER time listening TCP/IPC socket was able to accept() new connections
but unable to handle them.

this all geting even worse since unfortunately zmq has a bug and '*_listener_t' object not terminated
untill the socket's zmq_close().
AT LEAST FOR PUSH SOCKETS.
Everything is ok for SUB sockets.

Easy to reproduce without my fix:

zmq_socket(PUSH)
zmq_bind(tcp);
// connect to  it from PULL socket
zmq_unbind(tcp);

sleep(forever)

// netstat -anp | grep 'tcp listening socket'

With my fix you could see that after zmq_unbind(tcp) all previously connected tcp sessions
will not be finished untill the zmq_close(socket) regardless of ZMQ_LINGER value.

(*_listener_t terminates all owned session_base_t(connect=false) and they call pipe_t::terminate()
which in turn should call session_base_t::terminated() but this never happens)
2012-04-21 18:56:10 +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
Sergey KHripchenko
c77dc98b5c some spaces cleanups + delete unused anymore zmq::max_sockets + some minor code chages 2012-04-13 13:26:57 +04:00
Sergey KHripchenko
acba6bdd6c Implement ZMQ_TCP_ACCEPT_FILTER setsockopt() for listening TCP sockets.
Assign arbitrary number of filters that will be applied for each new TCP transport
connection on a listening socket.
If no filters applied, then TCP transport allows connections from any ip.
If at least one filter is applied then new connection source ip should be matched.
To clear all filters call zmq_setsockopt(socket, ZMQ_TCP_ACCEPT_FILTER, NULL, 0).
Filter is a null-terminated string with ipv6 or ipv4 CIDR.

For example:
localhost
127.0.0.1
mail.ru/24
::1
::1/128
3ffe:1::
3ffe:1::/56

Returns -1 if the filter couldn't be assigned(format error or ipv6 filter with ZMQ_IPV4ONLY set)

P.S.
The only thing that worries me is that I had to re-enable 'default assign by reference constructor/operator'
for 'tcp_address_t' (and for my inherited class tcp_address_mask_t) to store it in std::vector in 'options_t'...
2012-04-12 18:37:14 +04:00
Sergey KHripchenko
0c3d917926 initial implementation of tuning TCP keep-alives for TCP socket
currently not fully cross-platform
work on linux
possibly work in *bsd
and could be enhanced to work on windows
2012-04-05 19:39:53 +04:00
Martin Hurton
35233f9e2f remove unused variable 2012-03-20 19:34:10 +01:00
Mikko Koppanen
1824574f9b Minor fixes to get_address code to fix build on solaris and freebsd. Also service doesnt need to be discovered here 2012-02-20 04:26:25 +00:00
Mikko Koppanen
33a18f0f90 More fixes based on CentOS 6.2 results 2012-02-18 23:07:27 +00:00
Mikko Koppanen
d00d4843be More fixes for ZMQ_LAST_ENDPOINT. Added a test 2012-02-18 20:44:41 +00:00
Mikko Koppanen
b0573486c7 Fixes for tcp_listener::get_address 2012-02-18 19:48:09 +00:00
Ian Barber
2da76a3003 Updating to use getnameinfo rather than inet_ntop 2012-02-16 21:05:02 +00:00
Staffan Gimåker
b9fb48f47b Resolve addresses in the calling thread on connect.
This allows us to actually report an error to the caller on resolve
failure, rather than asserting later on in the io thread.

Signed-off-by: Staffan Gimåker <staffan@spotify.com>
2012-02-16 14:42:55 +01:00
Ian Barber
b5d3373905 Moving to std::string in options 2012-02-14 23:10:06 +00:00
Ian Barber
770f84331f Allowing value 0, and moving code to get_address functions based on feedback 2012-02-11 15:09:03 +00:00
Ian Barber
7b32c9cb51 Adding ZMQ_LAST_ENDPOINT for wildcard support on TCP and IPC sockets 2012-02-08 22:06:46 +00:00
Martin Sustrik
8e21d64c97 Copyright dates adjusted to reflect reality
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-11-01 18:06:11 +01:00
Martin Sustrik
ac7717b7b3 250bpm copyrights added
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-10-31 16:20:30 +01:00
Martin Sustrik
f78d9b6bfc Session class separated into socket-type-specific sessions
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>
2011-09-15 10:00:23 +02:00
Martin Sustrik
8b7ac4c2a9 Close file descriptors on exec (issue 218)
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>
2011-09-02 15:34:12 +02:00
Martin Sustrik
b6ecb00d23 TCP address related functionality moved to tcp_address_t
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-08-18 17:40:42 +02:00
Martin Sustrik
b3bac17607 tcp_engine renamed to stream engine
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>
2011-08-16 12:44:34 +02:00
Steven McCoy
57440b86e2 Add IPv6 support to tcp_listener
Signed-off-by: Steven McCoy <steven.mccoy@miru.hk>
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-08-15 08:56:00 +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
Steven McCoy
c27b9ac7de Update resolve_ip_interface and resolve_ip_hostname with ipv4only parameter.
Signed-off-by: Steven McCoy <steven.mccoy@miru.hk>
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-08-08 15:23:46 +02:00
Martin Sustrik
be48970977 MSVC build brought up-to-date
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-08-04 07:44:35 +02:00
Martin Sustrik
f63db009a1 Different listener implementations simplified
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-07-28 16:32:08 +02:00
Martin Sustrik
b45fec337a Tuning of TCP sockets is done at a single place
Instead of being spread throughout the codebase, the tuning
is done in tune_tcp_socket() function.

Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-07-28 15:13:04 +02:00
Martin Sustrik
46b053b8d6 Dead code removed from TCP and IPC transports
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-07-28 13:46:16 +02:00
Martin Sustrik
5ac63140b0 Implementations of TCP and IPC transports separated
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-07-28 13:19:55 +02:00
Martin Sustrik
ce7a9a58e3 Setting TCP socket options moved to tcp_engine_t
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-07-28 08:06:21 +02:00
Martin Sustrik
279302c5f5 Experimental VTCP listener added
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-07-26 18:35:40 +02:00
Martin Sustrik
9119b4fd7b TCP transport classes simplified
zmq_engine and tcp_socket merged into tcp_engine
zmq_connecter and tcp_connecter merged into tcp_connecter
zmq_listener and tcp_listener merged into tcp_listener

Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
2011-07-26 00:43:57 +02:00