как сократить время ожидания подключения? - PullRequest
4 голосов
/ 29 сентября 2010

простой скрипт для подключения к серверу:

#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 секунд например?

Ответы [ 2 ]

1 голос
/ 29 ноября 2010

Я не знаю много о Redis.но я предполагаю, что redisConnect внутренне в основном также просто вызывает connect () на блокирующем fd.

, поэтому попробуйте заранее установить время ожидания, используя setsockopt :

struct timeval timeout;
timeout.tv_usec = 0;
timeout.tv_sec = 2;
setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, (void *)&timeout, sizeof(timeout));

это устанавливает тайм-аут отправки на 2 секунды, для получения вы в основном делаете то же самое.

ура,

1 голос
/ 29 сентября 2010

Вам потребуется изменить библиотеку hiredis и функцию anetTcpGenericConnect , чтобы время ожидания соединения было известно. Вот пример здесь того, как это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...