2380 Commits

Author SHA1 Message Date
Justin.Hung
52ebffd715 avoid crashing in the multi-thread operation for std::vector
1. stl container is not thread safety
2. rm_fd() and loop() end to clear the retired event source will in multi-thread operation
3. may be crashed in reaper thread to delete the items in the std::vector as the source is nullptr
2016-12-05 09:28:05 +08:00
Luca Boccassi
e46d91d41f Problem: PR #2236 breaks the build
Solution: Revert "avoid crashing in the multi-thread operation for std::vector"

This reverts commit e1368bdac804a49de101725ede1f900aebe82c10.
2016-12-03 22:10:19 +00:00
Justin.Hung
e1368bdac8 avoid crashing in the multi-thread operation for std::vector
1. stl container is not thread safety
2. rm_fd() and loop() end to clear the retired event source will in multi-thread operation
3. may be crashed in reaper thread to delete the items in the std::vector as the source is nullptr
2016-12-02 17:33:13 +08:00
Laughing
febf801584 bug fix: AIX pollset error (#2233)
* bug fix: AIX pollset error

buf fix:  AIX only, pollset 'rm_fd' set fd_table to null first then set pe->fd to retired_fd

* remove extra spaces

remove extra spaces
2016-12-01 11:59:23 +01:00
Luca Boccassi
33fcd2d6ca Problem: Windows does not support IPV6_TCLASS
Solution: don't use it on Windows.
There is a Windows-specific API for ToS, even IPv4 does not work and
it's just a silent no-op on that platform.
2016-11-30 11:09:12 +00:00
Constantin Rack
4a24805f70 Merge pull request #2225 from bluca/select_broken
Problem: select broken
2016-11-24 20:00:33 +01:00
Luca Boccassi
121c9d16f5 Problem: select.cpp/hpp build fails with reorder error
Solution: initialise class variables in the same order they are
declared
2016-11-24 13:07:47 +00:00
Min RK
f302d8a7b6 only compare pollitem.fd if pollitem.socket is NULL
item.fd should be ignored if item.socket is defined.

Failing to check .socket could cause false-matches, raising EINVAL in zmq_poller_modify_fd.
2016-11-21 11:47:50 +01:00
Luca Boccassi
670bec56d8 Problem: size of zmq_msg_t is not known to FFI wrappers
Solution: add a ZMQ_MSG_T_SIZE context read-only option so that
wrappers can call zmq_ctx_get (ctx, ZMQ_MSG_T_SIZE) to get the
size at runtime.
2016-11-20 12:24:03 +00:00
Caleb Epstein
10181d7641 Untabify 2016-11-15 14:33:47 -05:00
Caleb Epstein
f577ceab4b Problem: multicast is spelled incorrectly in udp_address class
Solution: Fix typo of 'mutlicast' -> 'multicast'
2016-11-15 14:06:34 -05:00
Caleb Epstein
cdac1ac9d3 Fix htons copy pasta 2016-11-15 13:51:49 -05:00
Luca Boccassi
90f091abf3 Problem: IPV6_TCLASS setsockopt fails on IPv4 socket
Solution: if setsockopt errors out and errno is set to ENOPROTOOPT
(or EINVAL on OSX) ignore it and carry on.
2016-11-14 12:52:31 +00:00
Saif Hasan
fc8007e896 Make ZMQ_TOS work with IPv6 sockets
Summary:
To set `Type Of Service` for IP layer packets ZMQ provides `ZMQ_TOS` socket
option. However this only works for v4 sockets. Considering things are moving to
IPv6 heavily (especially within enterprise networks), ZMQ should support setting
`traffic class` for v6 based on `ZMQ_TOS`.

There is a subtle difference between v4 and v6 in terms of the positioning of
field but TOS has same meaning in both v4 and v6. Linux provides following APIs
for v4/v6 to set TOS field value.
```
// For v4
setsockopt(fd, IPPROTO_IP, IP_TOS, tos, sizeof(tos));

// For v6
setsockopt(fd, IPPROTO_IPV6, IPV6_TCLASS, tos, sizeof(tos));
```

Test Plan:
Make sure Cmake works fine and all tests passes.
Imported this change to `OpenR` project and tested on our local testbed.
Captured some packets exchanged between PUB/SUB and ROUTER/ROUTER sockets
pairs. Verify that `TCLASS` value is set as per expectation.

Tasks: #2208
2016-11-14 02:19:55 -08:00
Luca Boccassi
43f3cc5c78 Problem: kFreeBSD does not implement pthread_setschedparam
Solution: do not fail on kFreeBSD if this feature is not available
at runtime.
Thanks Steven Chamberlain <steven@pyro.eu.org> for the patch!
2016-11-05 18:14:22 +00:00
Luca Boccassi
361e99a906 Problem: kFreeBSD might return ECONNRESET under load when destroying engine
Solution: ignore it on kFreeBSD, as it is not an error
Thanks Steven Chamberlain <steven@pyro.eu.org> for the patch!
2016-11-05 18:13:01 +00:00
Dmitriy-GH
e7b12b3c2a Add WinXP compatibility
#define ZMQ_HAVE_WINDOWS_TARGET_XP  disable uncompatible WinAPI

1. Disable call if_indextoname()
2. Emulate windows Condition Variable API in class condition_variable_t with std::condition_variable
 	
This code can be compiled in MSVC 2015 with option "Platform toolset: Visual Studio 2015 - Windows XP (v140_xp)"
2016-11-02 15:44:27 +05:00
Phillip Mienk
28fbee74c8 Suppress warning on uninitialized variable use by initializing variable. 2016-10-31 12:25:30 -07:00
Hunter Laux
60b63ed518 Remove an unnecessary while (true)
This block of code will either return -1 or fall through.
The while (true) does nothing.
The braces limit the scope of int rc.
2016-10-31 11:46:57 -07:00
Dave Olszewski
b7f2c7e7ea Increment metadata refcount while it's in pending_metadata 2016-10-29 14:37:28 -07:00
Robert Castle
0dfb32a259 Problem: clock_gettime is now defined in macOS 10.12 SDK
Solution: Rename the custom implementation of clock_gettime for macOS to
alt_clock_gettime and wrap all usage in preprocessor macros to only enable the
alternative version when using macOS <= 10.11.

This issue occurs when targeting macOS 10.11 or earlier but using the 10.12
or newer SDK.
2016-10-28 11:04:21 +01:00
Luca Boccassi
25bf30bebe Problem: 2 connects with same sourceip:port to different destip:port fail
Solution: during a connect with a TCP endpoint if a source address is
passed set the SO_REUSEADDR flag on the socket before the bind system
call.
Add unit test to cover this case for both IPv4 and IPv6.
2016-10-23 22:31:45 +01:00
Juha Reunanen
bb7421dda2 Problem: Does not build in Visual Studio 2013 / Win32
Solution: #include <netioapi.h> and change some IP_ADAPTER_UNICAST_ADDRESS data types
2016-10-21 21:18:45 +03:00
Juha Reunanen
57c765ef5a Add EHOSTUNREACH to errno_to_string 2016-10-18 06:46:50 +03:00
Laughing
c5b528fdcd performance enhancement
use clock_gettime if there is no instruction to get cpu tick. It will take about 10% performance enhancement in AIX 7.1.
2016-10-14 20:33:27 +08:00
Jens Auer
b031325996 Fixed problems from previous PR for #2158 (#2160)
* - Fixed windows build errors
- Extended monitor lock scope to prevent race-condition between
  process_stop and monitor

* - Fixed windows build errors
- Extended monitor lock scope to prevent race-condition between
  process_stop and monitor
2016-10-12 10:34:22 +01:00
Jens Auer
d1c7280d05 Add mutex for monitor socket 2016-10-11 13:28:45 +00:00
Akhil Thampy
134f08b3ca Fixed issue #2155 2016-10-10 17:50:50 -05:00
Mário Kašuba
f6962903a7 Implemented network interface name resolution on Windows platform
Added fallback mechanism for specific socket binding on Windows platform with IPv6 enabled
2016-10-10 17:29:53 +02:00
yasirs
36af3edee2 Update tcp_address.cpp 2016-10-09 00:48:35 -04:00
Luca Boccassi
c592897f60
Problem: a request
Solution: honor it
2016-10-04 15:48:12 +01:00
Nick Guiffrida
1a2d58e4e7 Add #ifndef ZMQ_HAVE_WINDOWS guard around unistd.h include 2016-09-30 21:30:04 -07:00
Nick Guiffrida
f3de534897 Do not assign rc to zmq_poller_destroy in zmq_poller_poll
* Doing so was zmq_poller_poll to always return 0.
2016-09-30 21:10:25 -07:00
Nick Guiffrida
f46e45c263 Include unitstd.h in src/stream_engine.cpp for close system call 2016-09-30 21:10:05 -07:00
Min RK
fb5a04e21d allow duplicate entries in zmq_poller_poll
This should restore full compatibility with earlier zmq_poll behavior.

It complicates things a little bit, as collisions must be detected, and when collisions are found:

- event masks must be merged
- pollitems, events arrays are no longer co-ordered

Reverts the recent zmq_proxy patch to workaround the lack of repeat-item support in zmq_poll that is now fixed.
2016-09-29 16:33:02 +02:00
Min RK
310dafbc75 zmq_poll returns 0 on timeout
not -1, ETIMEDOUT like zmq_poller
2016-09-29 15:44:31 +02:00
Min RK
718608ce94 socket_poller::wait returns only triggered events
Return value is the number of events found. This also propagates to the return value of zmq_poller_wait_all.

zmq_poller_wait was only returning events on the first-registered socket.
2016-09-29 15:21:52 +02:00
Min RK
c636147c98 avoid duplicate entries in zmq_poll
zmq_poller doesn't allow a socket to appear twice
2016-09-29 12:59:53 +02:00
Min RK
53fb120687 heap-allocate events in zmq_poller_poll
variable-size array allocation is not allowed by some compilers
2016-09-28 15:17:57 +02:00
Luca Boccassi
55930f5e42 Merge pull request #2140 from minrk/zmq_poll_poller
Support all sockets in zmq_poll
2016-09-28 13:00:20 +01:00
Doron Somech
c0b1114944 Merge pull request #2138 from minrk/darwin-clock
only define clock macros on darwin if not already defined
2016-09-28 14:54:25 +03:00
Min RK
bdcaa935b9 zmq_poll calls zmq_poller if available
enables zmq_poll on threadsafe sockets only supported in zmq_poller (radio, dish, etc.)
2016-09-28 13:53:57 +02:00
Min RK
e50a987650 update socket_poller when ZMQ_POLL_BASED_ON_SELECT
previous patch updated only the branch for ZMQ_POLL_BASED_ON_POLL, causing failed builds on Windows.
2016-09-28 13:52:56 +02:00
Min RK
978c5c3499 only define clock macros on darwin if not already defined
clang from Xcode 8 has these already defined, causing duplicate macro warnings
2016-09-28 13:52:27 +02:00
Luca Boccassi
06d810b4c9 Problem: pkg-config Requires.private is broken
Solution: use only Libs.private to avoid breaking application builds.
Even though Requires.private are supposed to be parsed only if
pkg-config is called with --static, the --cflags parameter is enough
to trigger the parsing, causing build failures for applications that
do not (and should not) depend on libzmq's dependencies.
2016-09-27 23:34:35 +01:00
Luca Boccassi
6d9411607d Problem: pkgconfig file does not support static link
Solution: add dependencies, if necessary, to the .private Libs and
Requires field of the pkgconfig file at build time.
This way pkg-config --static --libs libzmq will correctly print
dependencies if they were used to build the static libzmq.a library.
2016-09-27 18:39:07 +01:00
Min RK
ec750732d4 pass through poller events
instead of allocating a new, identical array and copying the data.

This is only safe while zmq_poller_event_t and zmq::socket_poller_t::event_t are the same struct,
which they presumably will remain.
2016-09-27 14:59:07 +02:00
Min RK
de7fc1fcf8 add n_events argument to zmq_poller_wait_all
avoids unnecessary heap allocations, races on the number of items
2016-09-27 14:37:52 +02:00
Min RK
2bc9796651 Problem: zmq_poller only signals one event
Solution: zmq_poller_wait_all signals all events

allows signaling multiple events with one call to zmq_poller_wait_all
rather than emitting only one event.

this prepares for zmq_poll being based on zmq_poller,
which requires events for all sockets rather than just one.
2016-09-27 13:39:16 +02:00
Laughing
555a087763 fix bugs of the pollset (#2127)
* fix bugs of the pollset

1. extend 'fd_table' when fd_ is greater or equal than the size of 'fd_table';
2. delete specific fd from pollset before reset pollin or pollout according the description of AIX document

* fix bugs of the pollset

edit error. remove extra spaces and paste fault

* fix bugs of pollset

remove character '-' at the end line.
2016-09-27 08:44:54 +01:00