From bcf75777c83adc371ba56a88025d7c9c84178015 Mon Sep 17 00:00:00 2001 From: nexcvon Date: Fri, 3 Mar 2017 19:00:58 +0800 Subject: [PATCH] Problem: Assertion failed in zmq::signaler_t::send Solution: Change to the way it does below on non-Windows platforms, retry when send returns -1. --- src/signaler.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/signaler.cpp b/src/signaler.cpp index 5a0b8ddcee..e6ba826bce 100644 --- a/src/signaler.cpp +++ b/src/signaler.cpp @@ -187,9 +187,13 @@ void zmq::signaler_t::send () errno_assert (sz == sizeof (inc)); #elif defined ZMQ_HAVE_WINDOWS unsigned char dummy = 0; - int nbytes = ::send (w, (char *) &dummy, sizeof (dummy), 0); - wsa_assert (nbytes != SOCKET_ERROR); - zmq_assert (nbytes == sizeof (dummy)); + while (true) { + int nbytes = ::send (w, (char*) &dummy, sizeof (dummy), 0); + if (unlikely (nbytes == SOCKET_ERROR)) + continue; + zmq_assert (nbytes == sizeof (dummy)); + break; + } #else unsigned char dummy = 0; while (true) {