Merge pull request #670 from jman-krafton/master
fix timeout code in windows
This commit is contained in:
commit
9c7c694cb7
15
net.c
15
net.c
@ -63,6 +63,10 @@ int redisNetRead(redisContext *c, char *buf, size_t bufcap) {
|
|||||||
if ((errno == EWOULDBLOCK && !(c->flags & REDIS_BLOCK)) || (errno == EINTR)) {
|
if ((errno == EWOULDBLOCK && !(c->flags & REDIS_BLOCK)) || (errno == EINTR)) {
|
||||||
/* Try again later */
|
/* Try again later */
|
||||||
return 0;
|
return 0;
|
||||||
|
} else if(errno == ETIMEDOUT && (c->flags & REDIS_BLOCK)) {
|
||||||
|
/* especially in windows */
|
||||||
|
__redisSetError(c, REDIS_ERR_TIMEOUT, "recv timeout");
|
||||||
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
__redisSetError(c, REDIS_ERR_IO, NULL);
|
__redisSetError(c, REDIS_ERR_IO, NULL);
|
||||||
return -1;
|
return -1;
|
||||||
@ -310,11 +314,18 @@ int redisCheckSocketError(redisContext *c) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int redisContextSetTimeout(redisContext *c, const struct timeval tv) {
|
int redisContextSetTimeout(redisContext *c, const struct timeval tv) {
|
||||||
if (setsockopt(c->fd,SOL_SOCKET,SO_RCVTIMEO,&tv,sizeof(tv)) == -1) {
|
const void *to_ptr = &tv;
|
||||||
|
size_t to_sz = sizeof(tv);
|
||||||
|
#ifdef _WIN32
|
||||||
|
DWORD timeout_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000;
|
||||||
|
to_ptr = &timeout_msec;
|
||||||
|
to_sz = sizeof(timeout_msec);
|
||||||
|
#endif
|
||||||
|
if (setsockopt(c->fd,SOL_SOCKET,SO_RCVTIMEO,to_ptr,to_sz) == -1) {
|
||||||
__redisSetErrorFromErrno(c,REDIS_ERR_IO,"setsockopt(SO_RCVTIMEO)");
|
__redisSetErrorFromErrno(c,REDIS_ERR_IO,"setsockopt(SO_RCVTIMEO)");
|
||||||
return REDIS_ERR;
|
return REDIS_ERR;
|
||||||
}
|
}
|
||||||
if (setsockopt(c->fd,SOL_SOCKET,SO_SNDTIMEO,&tv,sizeof(tv)) == -1) {
|
if (setsockopt(c->fd,SOL_SOCKET,SO_SNDTIMEO,to_ptr,to_sz) == -1) {
|
||||||
__redisSetErrorFromErrno(c,REDIS_ERR_IO,"setsockopt(SO_SNDTIMEO)");
|
__redisSetErrorFromErrno(c,REDIS_ERR_IO,"setsockopt(SO_SNDTIMEO)");
|
||||||
return REDIS_ERR;
|
return REDIS_ERR;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user