连接服务器的简单脚本:
#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);
}
如果服务器可用 - 一切正常。如果不是 - 有一个很长的停顿。例如,如何将等待时间减少到2秒?
答案 0 :(得分:1)
您需要修改hiredis库和anetTcpGenericConnect函数才能识别连接超时。有一个例子here如何做到这一点。
答案 1 :(得分:1)
我对redis知之甚少。但我想,redisConnect内部基本上也只是在阻塞fd上调用connect()。
所以请尝试使用setsockopt预先设置超时:
struct timeval timeout;
timeout.tv_usec = 0;
timeout.tv_sec = 2;
setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, (void *)&timeout, sizeof(timeout));
这会将发送时间设置为2秒,对于接收,您基本上也会这样做。
欢呼声,