From 0d8f254359605769da0d146fc2ac80eae1c2932f Mon Sep 17 00:00:00 2001 From: Geoff Garside Date: Wed, 17 Oct 2012 23:45:44 +0100 Subject: [PATCH] Add IPv6 support to sentinel.c. This has been done by exposing the anetSockName() function anet.c to be used when the sentinel is publishing its existence to the masters. This implementation is very unintelligent as it will likely break if used with IPv6 as the nested colons will break any parsing of the PUBLISH string by the master. --- src/anet.h | 1 + src/sentinel.c | 9 ++++----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/anet.h b/src/anet.h index ff5897af10..b23411cbbe 100644 --- a/src/anet.h +++ b/src/anet.h @@ -57,5 +57,6 @@ int anetDisableTcpNoDelay(char *err, int fd); int anetTcpKeepAlive(char *err, int fd); int anetPeerToString(int fd, char *ip, size_t ip_len, int *port); int anetKeepAlive(char *err, int fd, int interval); +int anetSockName(int fd, char *ip, size_t ip_len, int *port); #endif diff --git a/src/sentinel.c b/src/sentinel.c index cb70087272..e89199fecc 100644 --- a/src/sentinel.c +++ b/src/sentinel.c @@ -1837,14 +1837,13 @@ void sentinelPingInstance(sentinelRedisInstance *ri) { (now - ri->last_pub_time) > SENTINEL_PUBLISH_PERIOD) { /* PUBLISH hello messages only to masters. */ - struct sockaddr_in sa; - socklen_t salen = sizeof(sa); - - if (getsockname(ri->cc->c.fd,(struct sockaddr*)&sa,&salen) != -1) { + char ip[INET6_ADDRSTRLEN]; + if (anetSockName(ri->cc->c.fd,ip,sizeof(ip),NULL) != -1) { char myaddr[128]; + // FIXME: IPv6 will break this due to nested : characters -geoffgarside snprintf(myaddr,sizeof(myaddr),"%s:%d:%s:%d", - inet_ntoa(sa.sin_addr), server.port, server.runid, + ip, server.port, server.runid, (ri->flags & SRI_CAN_FAILOVER) != 0); retval = redisAsyncCommand(ri->cc, sentinelPublishReplyCallback, NULL, "PUBLISH %s %s",