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.
This commit is contained in:
Geoff Garside
2012-10-17 23:45:44 +01:00
committed by antirez
parent 5938126c98
commit 0d8f254359
2 changed files with 5 additions and 5 deletions

View File

@ -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",