From 1d092a235aae92cb9a4fe260c385a850eadfc611 Mon Sep 17 00:00:00 2001 From: m Date: Sun, 31 Mar 2019 18:10:34 +0200 Subject: Use recv/send instead of read/write The recv/send calls are more portable than read/write, since unlike the latter, the former work with Windows sockets. We also check for EWOULDBLOCK instead of EAGAIN. On most Unices, EAGAIN and EWOULDBLBOCK are the same thing. However, on Windows they are different, and send/recv are expected to give EWOULDBLOCK for non-blocking sockets. --- net.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/net.c b/net.c index 87b7fbb..0c8f5b3 100644 --- a/net.c +++ b/net.c @@ -65,9 +65,9 @@ void redisNetClose(redisContext *c) { } int redisNetRead(redisContext *c, char *buf, size_t bufcap) { - int nread = read(c->fd, buf, bufcap); + int nread = recv(c->fd, buf, bufcap, 0); if (nread == -1) { - if ((errno == EAGAIN && !(c->flags & REDIS_BLOCK)) || (errno == EINTR)) { + if ((errno == EWOULDBLOCK && !(c->flags & REDIS_BLOCK)) || (errno == EINTR)) { /* Try again later */ return 0; } else { @@ -83,9 +83,9 @@ int redisNetRead(redisContext *c, char *buf, size_t bufcap) { } int redisNetWrite(redisContext *c) { - int nwritten = write(c->fd, c->obuf, sdslen(c->obuf)); + int nwritten = send(c->fd, c->obuf, sdslen(c->obuf), 0); if (nwritten < 0) { - if ((errno == EAGAIN && !(c->flags & REDIS_BLOCK)) || (errno == EINTR)) { + if ((errno == EWOULDBLOCK && !(c->flags & REDIS_BLOCK)) || (errno == EINTR)) { /* Try again later */ } else { __redisSetError(c, REDIS_ERR_IO, NULL); -- cgit v1.2.3