Reputation: 1353
simple script for connect server:
#include "hiredis.h"
int main(void) {
int fd;
unsigned int j;
redisReply *reply;
reply = redisConnect(&fd, "test.com", 6379);
if (reply != NULL) {
printf("Connection error: %s", reply->reply);
exit(1);
}
reply = redisCommand(fd,"PING");
printf("PONG: %s\n", reply->reply);
freeReplyObject(reply);
}
if the server is available - everything is normal. If not - there is a long pause. How to reduce the waiting time to 2 seconds for example ?
Upvotes: 4
Views: 584
Reputation: 3500
You'll need to modify the hiredis library, and the anetTcpGenericConnect function to make connect timeout aware. There's an example here of how to do it.
Upvotes: 1
Reputation: 2317
i don't know much about redis. but I assume, the redisConnect internally is basically also just calling connect() on an blocking fd.
so try setting the timeout beforehand using setsockopt:
struct timeval timeout;
timeout.tv_usec = 0;
timeout.tv_sec = 2;
setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, (void *)&timeout, sizeof(timeout));
this sets the send timout to 2 sec, for the receive, you basically do the same.
cheers,
Upvotes: 1