Skip to content

Commit

Permalink
Merge branch 'ipv6'
Browse files Browse the repository at this point in the history
  • Loading branch information
pietern committed Jul 11, 2013
2 parents fbf1bb6 + 06919b3 commit cc3ee45
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 4 deletions.
6 changes: 4 additions & 2 deletions examples/example.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,15 @@

#include <hiredis.h>

int main(void) {
int main(int argc, char **argv) {
unsigned int j;
redisContext *c;
redisReply *reply;
const char *hostname = (argc > 1) ? argv[1] : "127.0.0.1";
int port = (argc > 2) ? atoi(argv[2]) : 6379;

struct timeval timeout = { 1, 500000 }; // 1.5 seconds
c = redisConnectWithTimeout((char*)"127.0.0.1", 6379, timeout);
c = redisConnectWithTimeout(hostname, port, timeout);
if (c == NULL || c->err) {
if (c) {
printf("Connection error: %s\n", c->errstr);
Expand Down
12 changes: 10 additions & 2 deletions net.c
Original file line number Diff line number Diff line change
Expand Up @@ -255,9 +255,17 @@ int redisContextConnectTcp(redisContext *c, const char *addr, int port, const st
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;

/* Try with IPv6 if no IPv4 address was found. We do it in this order since
* in a Redis client you can't afford to test if you have IPv6 connectivity
* as this would add latency to every connect. Otherwise a more sensible
* route could be: Use IPv6 if both addresses are available and there is IPv6
* connectivity. */
if ((rv = getaddrinfo(addr,_port,&hints,&servinfo)) != 0) {
__redisSetError(c,REDIS_ERR_OTHER,gai_strerror(rv));
return REDIS_ERR;
hints.ai_family = AF_INET6;
if ((rv = getaddrinfo(addr,_port,&hints,&servinfo)) != 0) {
__redisSetError(c,REDIS_ERR_OTHER,gai_strerror(rv));
return REDIS_ERR;
}
}
for (p = servinfo; p != NULL; p = p->ai_next) {
if ((s = socket(p->ai_family,p->ai_socktype,p->ai_protocol)) == -1)
Expand Down

0 comments on commit cc3ee45

Please sign in to comment.