Fix ESL infinite loop on handle_recv() when errno is already set

system calls do not clear errno, just set it in case of failure, so we
gotta make sure the recv() syscall really failed by checking the return value
This commit is contained in:
Moises Silva 2014-01-28 19:07:34 -05:00 committed by Anthony Minessale
parent dfd591e9f5
commit f5f4df3483
1 changed files with 1 additions and 1 deletions

View File

@ -1233,7 +1233,7 @@ static esl_ssize_t handle_recv(esl_handle_t *handle, void *data, esl_size_t data
} else if ((activity & ESL_POLL_READ)) {
if (!(activity = recv(handle->sock, data, datalen, 0))) {
activity = -1;
} else if (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK) {
} else if (activity < 0 && (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK)) {
activity = 0;
}
}