7 #if defined ZMQ_POLL_BASED_ON_POLL
8 #if !defined ZMQ_HAVE_WINDOWS && !defined ZMQ_HAVE_AIX
11 #elif defined ZMQ_POLL_BASED_ON_SELECT
12 #if defined ZMQ_HAVE_WINDOWS
13 #elif defined ZMQ_HAVE_HPUX
14 #include <sys/param.h>
15 #include <sys/types.h>
17 #elif defined ZMQ_HAVE_OPENVMS
18 #include <sys/types.h>
20 #elif defined ZMQ_HAVE_VXWORKS
21 #include <sys/types.h>
26 #include <sys/select.h>
39 #if !defined ZMQ_HAVE_WINDOWS
41 #include <netinet/tcp.h>
42 #include <sys/types.h>
43 #include <sys/socket.h>
46 #if !defined(ZMQ_HAVE_WINDOWS)
53 #if defined ZMQ_HAVE_ANDROID
56 #elif defined ZMQ_HAVE_VXWORKS
58 ns_.tv_sec = ms_ / 1000;
59 ns_.tv_nsec = ms_ % 1000 * 1000000;
60 return nanosleep (&ns_, 0);
62 return usleep (ms_ * 1000);
72 unsigned int ms_so_far = 0;
73 const unsigned int min_step_ms = 1;
74 const unsigned int max_step_ms = 100;
75 const unsigned int step_ms =
76 std::min (std::max (min_step_ms, max_ms_ / 10), max_step_ms);
85 }
while (ms_so_far < max_ms_ && rc == -1 &&
errno ==
EAGAIN);
107 #if defined ZMQ_HAVE_EVENTFD
112 #elif defined ZMQ_HAVE_WINDOWS
114 const struct linger so_linger = {1, 0};
115 int rc = setsockopt (_w, SOL_SOCKET, SO_LINGER,
116 reinterpret_cast<const char *
> (&so_linger),
119 if (rc == 0 || WSAGetLastError () != WSANOTINITIALISED) {
120 wsa_assert (rc != SOCKET_ERROR);
122 wsa_assert (rc != SOCKET_ERROR);
126 wsa_assert (rc != SOCKET_ERROR);
148 #if defined HAVE_FORK
154 #if defined ZMQ_HAVE_EVENTFD
155 const uint64_t inc = 1;
156 ssize_t sz = write (_w, &inc,
sizeof (inc));
158 #elif defined ZMQ_HAVE_WINDOWS
159 const char dummy = 0;
163 wsa_assert (nbytes != SOCKET_ERROR);
165 }
while (nbytes == SOCKET_ERROR);
168 #elif defined ZMQ_HAVE_VXWORKS
169 unsigned char dummy = 0;
174 #if defined(HAVE_FORK)
185 unsigned char dummy = 0;
190 #if defined(HAVE_FORK)
215 #ifdef ZMQ_POLL_BASED_ON_POLL
219 const int rc =
poll (&pfd, 1, timeout_);
241 #elif defined ZMQ_POLL_BASED_ON_SELECT
243 optimized_fd_set_t fds (1);
244 FD_ZERO (fds.get ());
245 FD_SET (_r, fds.get ());
248 timeout.tv_sec = timeout_ / 1000;
249 timeout.tv_usec = timeout_ % 1000 * 1000;
251 #ifdef ZMQ_HAVE_WINDOWS
254 wsa_assert (rc != SOCKET_ERROR);
278 #if defined ZMQ_HAVE_EVENTFD
280 ssize_t sz = read (_r, &
dummy,
sizeof (
dummy));
286 const uint64_t inc =
dummy - 1;
287 ssize_t sz2 = write (_w, &inc,
sizeof (inc));
295 #if defined ZMQ_HAVE_WINDOWS
297 ::recv (_r,
reinterpret_cast<char *
> (&
dummy),
sizeof (
dummy), 0);
298 wsa_assert (nbytes != SOCKET_ERROR);
299 #elif defined ZMQ_HAVE_VXWORKS
300 ssize_t nbytes = ::recv (_r, (
char *) &
dummy,
sizeof (
dummy), 0);
303 ssize_t nbytes = ::recv (_r, &
dummy,
sizeof (
dummy), 0);
314 #if defined ZMQ_HAVE_EVENTFD
316 ssize_t sz = read (_r, &
dummy,
sizeof (
dummy));
326 const uint64_t inc =
dummy - 1;
327 ssize_t sz2 = write (_w, &inc,
sizeof (inc));
336 #if defined ZMQ_HAVE_WINDOWS
338 ::recv (_r,
reinterpret_cast<char *
> (&
dummy),
sizeof (
dummy), 0);
339 if (nbytes == SOCKET_ERROR) {
340 const int last_error = WSAGetLastError ();
341 if (last_error == WSAEWOULDBLOCK) {
345 wsa_assert (last_error == WSAEWOULDBLOCK);
347 #elif defined ZMQ_HAVE_VXWORKS
348 ssize_t nbytes = ::recv (_r, (
char *) &
dummy,
sizeof (
dummy), 0);
358 ssize_t nbytes = ::recv (_r, &
dummy,
sizeof (
dummy), 0);
380 void zmq::signaler_t::forked ()