diff options
Diffstat (limited to 'src/surveyor.cpp')
-rw-r--r-- | src/surveyor.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/surveyor.cpp b/src/surveyor.cpp index b72b91b..bd19b8a 100644 --- a/src/surveyor.cpp +++ b/src/surveyor.cpp @@ -92,8 +92,16 @@ int xs::surveyor_t::xrecv (msg_t *msg_, int flags_) // Get the first part of the response -- the survey ID. rc = xsurveyor_t::xrecv (msg_, flags_); - if (rc != 0) - return rc; + if (rc != 0) { + if (errno != EAGAIN) + return -1; + + // In case of AGAIN we should check whether the survey timeout expired. + // If so, we should return ETIMEDOUT so that user is able to + // distinguish survey timeout from RCVTIMEO-caused timeout. + errno = now_ms () >= timeout ? ETIMEDOUT : EAGAIN; + return -1; + } // Check whether this is response for the onging survey. If not, we can // drop the response. |