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 60c56109bc
commit 3eb27f970d
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;
}
}