From 9ced36e4075e7b90fbc55afc52960c2cda940d8a Mon Sep 17 00:00:00 2001 From: Luca Boccassi Date: Fri, 1 Nov 2019 09:34:03 +0000 Subject: [PATCH] Problem: WSAEventSelect checks for FD_OOB, but select does not WSAEventSelect is used on Windows (when select is the polling method) only if waiting for more than one socket family, excluding IPv4/6. It is then passed FD_OOB, which means it can be woken by OOB messages, but select later on never checks for it. Remove FD_OOB as it's not actually used for anything. --- src/select.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/select.cpp b/src/select.cpp index 8f8f6f50..7a2fc05b 100644 --- a/src/select.cpp +++ b/src/select.cpp @@ -376,16 +376,13 @@ void zmq::select_t::loop () rc = WSAEventSelect (fd, wsa_events.events[3], FD_READ | FD_ACCEPT | FD_CLOSE - | FD_WRITE | FD_CONNECT | FD_OOB); + | FD_WRITE | FD_CONNECT); else if (FD_ISSET (fd, &family_entry.fds_set.read)) rc = WSAEventSelect (fd, wsa_events.events[0], - FD_READ | FD_ACCEPT | FD_CLOSE - | FD_OOB); + FD_READ | FD_ACCEPT | FD_CLOSE); else if (FD_ISSET (fd, &family_entry.fds_set.write)) rc = WSAEventSelect (fd, wsa_events.events[1], - FD_WRITE | FD_CONNECT | FD_OOB); - else if (FD_ISSET (fd, &family_entry.fds_set.error)) - rc = WSAEventSelect (fd, wsa_events.events[2], FD_OOB); + FD_WRITE | FD_CONNECT); else rc = 0;