summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMartin Sustrik <sustrik@250bpm.com>2010-02-24 16:19:53 +0100
committerMartin Sustrik <sustrik@250bpm.com>2010-02-24 16:19:53 +0100
commitbe51cfa419bb6c75eb24d241769a7c5543c432a7 (patch)
tree737eddcd82406b821c6131dd3f67336f40010a52 /src
parent0b4172b8689b60ce254c6823d69962bbdbd031d4 (diff)
parentb7f01f9071c26292c30517bac18dae92efaf3ffb (diff)
Merge branch 'master' of git@github.com:sustrik/zeromq2
Diffstat (limited to 'src')
-rw-r--r--src/fd_signaler.cpp26
1 files changed, 19 insertions, 7 deletions
diff --git a/src/fd_signaler.cpp b/src/fd_signaler.cpp
index f1ec6af..653f36d 100644
--- a/src/fd_signaler.cpp
+++ b/src/fd_signaler.cpp
@@ -153,9 +153,9 @@ zmq::fd_signaler_t::fd_signaler_t ()
wsa_assert (r != INVALID_SOCKET);
// Set the read site of the pair to non-blocking mode.
- //unsigned long argp = 1;
- //rc = ioctlsocket (r, FIONBIO, &argp);
- //wsa_assert (rc != SOCKET_ERROR);
+ unsigned long argp = 1;
+ rc = ioctlsocket (r, FIONBIO, &argp);
+ wsa_assert (rc != SOCKET_ERROR);
// We don't need the listening socket anymore. Close it.
rc = closesocket (listener);
@@ -184,10 +184,22 @@ void zmq::fd_signaler_t::signal (int signal_)
uint64_t zmq::fd_signaler_t::poll ()
{
- // TODO: Can we do a blocking read on non-blocking socket?
- // It's not needed as for now, so let it stay unimplemented.
- zmq_assert (false);
- return 0;
+ // Switch to blocking mode.
+ unsigned long argp = 0;
+ int rc = ioctlsocket (r, FIONBIO, &argp);
+ wsa_assert (rc != SOCKET_ERROR);
+
+ // Get the signals. Given that we are in the blocking mode now,
+ // there should be at least a single signal returned.
+ uint64_t signals = check ();
+ zmq_assert (signals);
+
+ // Switch back to non-blocking mode.
+ argp = 1;
+ rc = ioctlsocket (r, FIONBIO, &argp);
+ wsa_assert (rc != SOCKET_ERROR);
+
+ return signals;
}
uint64_t zmq::fd_signaler_t::check ()