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:
parent
dfd591e9f5
commit
f5f4df3483
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue