Commit b50e3215 authored by antirez's avatar antirez
Browse files

Translate rio fdset target EWOULDBLOCK error into ETIMEDOUT.

EWOULDBLOCK with the fdset rio target is returned when we try to write
but the send timeout socket option triggered an error. Better to
translate the error in something the user can actually recognize as a
timeout.
parent d4f6a171
...@@ -203,7 +203,14 @@ static size_t rioFdsetWrite(rio *r, const void *buf, size_t len) { ...@@ -203,7 +203,14 @@ static size_t rioFdsetWrite(rio *r, const void *buf, size_t len) {
size_t nwritten = 0; size_t nwritten = 0;
while(nwritten != count) { while(nwritten != count) {
retval = write(r->io.fdset.fds[j],p+nwritten,count-nwritten); retval = write(r->io.fdset.fds[j],p+nwritten,count-nwritten);
if (retval <= 0) break; if (retval <= 0) {
/* With blocking sockets, which is the sole user of this
* rio target, EWOULDBLOCK is returned only because of
* the SO_SNDTIMEO socket option, so we translate the error
* into one more recognizable by the user. */
if (retval == -1 && errno == EWOULDBLOCK) errno = ETIMEDOUT;
break;
}
nwritten += retval; nwritten += retval;
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment