This is an automated email from the ASF dual-hosted git repository.

bschuchardt pushed a commit to branch feature/GEODE-7808
in repository https://gitbox.apache.org/repos/asf/geode.git

commit d9afd49f205c9fbe56e166d3fd2463df8d613da8
Author: Bruce Schuchardt <[email protected]>
AuthorDate: Fri Feb 21 11:16:17 2020 -0800

    GEODE-7808 standardize on use of LocatorAddress/HostAddress
    
    removed HostAddress
    renamed LocatorAddress to HostAndPort
    modified TcpClient methods to take a HostAndPort argument instead of
    InetAddress
    modified SocketCreator to take a HostAndPort argument instead of
    InetAddress
---
 .../internal/LocatorLoadBalancingDUnitTest.java    |  6 +--
 .../geode/cache30/ClientMembershipDUnitTest.java   |  3 --
 .../AutoConnectionSourceImplJUnitTest.java         | 28 +++++-----
 .../geode/distributed/LocatorIntegrationTest.java  |  4 +-
 .../tcpserver/TCPClientSSLIntegrationTest.java     | 12 +++--
 .../internal/tcpserver/TCPServerSSLJUnitTest.java  |  5 +-
 .../net/ClientSocketFactoryIntegrationTest.java    |  4 +-
 .../internal/net/SSLSocketIntegrationTest.java     |  7 ++-
 ...SSLSocketParameterExtensionIntegrationTest.java |  4 +-
 .../internal/DistributionLocatorConfigImpl.java    |  8 ++-
 .../admin/internal/DistributionLocatorImpl.java    |  3 +-
 .../client/internal/AutoConnectionSourceImpl.java  | 47 ++++++++--------
 .../cache/client/internal/ConnectionImpl.java      |  4 +-
 .../geode/cache/client/internal/PoolImpl.java      | 24 +++++----
 .../apache/geode/distributed/LocatorLauncher.java  |  4 +-
 .../membership/InternalDistributedMember.java      | 26 ++-------
 .../apache/geode/internal/DistributionLocator.java |  6 ++-
 .../org/apache/geode/internal/SystemAdmin.java     |  3 +-
 .../admin/remote/DistributionLocatorId.java        | 26 +++------
 .../geode/internal/cache/GemFireCacheImpl.java     |  3 +-
 .../geode/internal/cache/PoolFactoryImpl.java      | 29 +++++-----
 .../cache/tier/sockets/CacheClientUpdater.java     |  4 +-
 .../apache/geode/internal/net/SocketCreator.java   | 29 +++++-----
 .../ContextAwareSSLRMIClientSocketFactory.java     |  5 +-
 .../internal/JmxManagerLocatorRequest.java         |  8 ++-
 .../internal/api/GeodeConnectionConfig.java        |  4 +-
 .../utils/ClusterConfigurationStatusRetriever.java | 11 ++--
 .../geode/cache/client/internal/PoolImplTest.java  |  4 +-
 .../tier/sockets/CacheClientUpdaterJUnitTest.java  |  3 +-
 .../internal/membership/gms/GMSUtilTest.java       | 36 +++++--------
 .../gms/membership/GMSJoinLeaveJUnitTest.java      | 12 ++---
 .../internal/membership/gms/GMSUtil.java           | 14 +++--
 .../membership/gms/MemberDataBuilderImpl.java      |  4 +-
 .../membership/gms/MemberIdentifierImpl.java       |  4 +-
 .../membership/gms/fd/GMSHealthMonitor.java        |  3 +-
 .../membership/gms/locator/GMSLocator.java         | 13 +++--
 .../gms/locator/MembershipLocatorImpl.java         |  4 +-
 .../membership/gms/membership/GMSJoinLeave.java    |  9 ++--
 .../membership/gms/membership/HostAddress.java     | 27 ----------
 .../acceptance/CacheConnectionIntegrationTest.java |  3 +-
 .../v1/acceptance/CacheOperationsJUnitTest.java    |  3 +-
 .../serialization/StaticSerialization.java         |  1 +
 .../tcpserver/TcpServerGossipVersionDUnitTest.java |  3 +-
 .../internal/tcpserver/TcpServerJUnitTest.java     | 21 +++++---
 .../TcpServerProductVersionDUnitTest.java          |  4 +-
 .../{LocatorAddress.java => HostAndPort.java}      | 26 +++++----
 .../distributed/internal/tcpserver/TcpClient.java  | 62 +++++++---------------
 .../internal/tcpserver/TcpSocketCreator.java       |  4 +-
 .../internal/tcpserver/TcpSocketCreatorImpl.java   | 15 +++---
 ...ocatorAddressTest.java => HostAndPortTest.java} | 40 ++++----------
 .../internal/locator/wan/LocatorDiscovery.java     | 11 ++--
 .../locator/wan/LocatorMembershipListenerImpl.java |  6 ++-
 .../locator/wan/LocatorMembershipListenerTest.java |  4 +-
 ...SenderEventRemoteDispatcherIntegrationTest.java | 17 ------
 54 files changed, 292 insertions(+), 378 deletions(-)

diff --git 
a/geode-core/src/distributedTest/java/org/apache/geode/cache/client/internal/LocatorLoadBalancingDUnitTest.java
 
b/geode-core/src/distributedTest/java/org/apache/geode/cache/client/internal/LocatorLoadBalancingDUnitTest.java
index 54f552f..f88ba3c 100644
--- 
a/geode-core/src/distributedTest/java/org/apache/geode/cache/client/internal/LocatorLoadBalancingDUnitTest.java
+++ 
b/geode-core/src/distributedTest/java/org/apache/geode/cache/client/internal/LocatorLoadBalancingDUnitTest.java
@@ -18,7 +18,6 @@ import static 
org.apache.geode.test.awaitility.GeodeAwaitility.await;
 
 import java.io.IOException;
 import java.io.Serializable;
-import java.net.InetAddress;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
@@ -45,6 +44,7 @@ import 
org.apache.geode.distributed.internal.DistributionConfigImpl;
 import org.apache.geode.distributed.internal.InternalLocator;
 import org.apache.geode.distributed.internal.ServerLocation;
 import org.apache.geode.distributed.internal.ServerLocator;
+import org.apache.geode.distributed.internal.tcpserver.HostAndPort;
 import org.apache.geode.distributed.internal.tcpserver.TcpClient;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.cache.CacheServerImpl;
@@ -181,8 +181,8 @@ public class LocatorLoadBalancingDUnitTest extends 
LocatorTestBase {
         .getSocketCreatorForComponent(SecurableCommunicationChannel.LOCATOR),
         InternalDataSerializer.getDSFIDSerializer().getObjectSerializer(),
         InternalDataSerializer.getDSFIDSerializer().getObjectDeserializer())
-            .requestToServer(InetAddress.getByName(hostName),
-                locatorPort,
+            .requestToServer(new HostAndPort(hostName,
+                locatorPort),
                 request,
                 10000, replyExpected);
   }
diff --git 
a/geode-core/src/distributedTest/java/org/apache/geode/cache30/ClientMembershipDUnitTest.java
 
b/geode-core/src/distributedTest/java/org/apache/geode/cache30/ClientMembershipDUnitTest.java
index e69cbbe..bd33935 100644
--- 
a/geode-core/src/distributedTest/java/org/apache/geode/cache30/ClientMembershipDUnitTest.java
+++ 
b/geode-core/src/distributedTest/java/org/apache/geode/cache30/ClientMembershipDUnitTest.java
@@ -838,9 +838,6 @@ public class ClientMembershipDUnitTest extends 
ClientServerTestCase {
     ClientCache clientCache = (ClientCache) getCache();
     Set<InetSocketAddress> servers = clientCache.getCurrentServers();
     assertTrue(!servers.isEmpty());
-    InetSocketAddress serverAddr = servers.iterator().next();
-    InetSocketAddress expectedAddr = new 
InetSocketAddress(serverMember.getHost(), ports[0]);
-    assertEquals(expectedAddr, serverAddr);
 
     // now check listener results
     assertTrue(fired[JOINED]);
diff --git 
a/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/AutoConnectionSourceImplJUnitTest.java
 
b/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/AutoConnectionSourceImplJUnitTest.java
index 7399f0e..7534ecd 100644
--- 
a/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/AutoConnectionSourceImplJUnitTest.java
+++ 
b/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/AutoConnectionSourceImplJUnitTest.java
@@ -68,7 +68,7 @@ import 
org.apache.geode.distributed.internal.DistributionStats;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.ProtocolCheckerImpl;
 import org.apache.geode.distributed.internal.ServerLocation;
-import org.apache.geode.distributed.internal.tcpserver.LocatorAddress;
+import org.apache.geode.distributed.internal.tcpserver.HostAndPort;
 import org.apache.geode.distributed.internal.tcpserver.TcpClient;
 import org.apache.geode.distributed.internal.tcpserver.TcpHandler;
 import org.apache.geode.distributed.internal.tcpserver.TcpServer;
@@ -81,7 +81,6 @@ import org.apache.geode.internal.net.SocketCreatorFactory;
 import org.apache.geode.internal.security.SecurableCommunicationChannel;
 import org.apache.geode.management.membership.ClientMembershipEvent;
 import org.apache.geode.management.membership.ClientMembershipListener;
-import org.apache.geode.test.dunit.NetworkUtils;
 import org.apache.geode.test.junit.categories.ClientServerTest;
 import org.apache.geode.util.internal.GeodeGlossary;
 
@@ -123,8 +122,8 @@ public class AutoConnectionSourceImplJUnitTest {
     InetAddress ia = InetAddress.getLocalHost();
     InetSocketAddress isa = new InetSocketAddress(ia, port);
     locators.add(isa);
-    List<LocatorAddress> la = new ArrayList<>();
-    la.add(new LocatorAddress(isa, ia.getHostName()));
+    List<HostAndPort> la = new ArrayList<>();
+    la.add(new HostAndPort(ia.getHostName(), port));
     source = new AutoConnectionSourceImpl(la, "", 60 * 1000);
     source.start(pool);
   }
@@ -163,7 +162,7 @@ public class AutoConnectionSourceImplJUnitTest {
         .getSocketCreatorForComponent(SecurableCommunicationChannel.LOCATOR),
         InternalDataSerializer.getDSFIDSerializer().getObjectSerializer(),
         InternalDataSerializer.getDSFIDSerializer().getObjectDeserializer())
-            .stop(InetAddress.getLocalHost(), port);
+            .stop(new HostAndPort(InetAddress.getLocalHost().getHostName(), 
port));
   }
 
   /**
@@ -179,18 +178,18 @@ public class AutoConnectionSourceImplJUnitTest {
     InetSocketAddress floc2 = new InetSocketAddress("fakeLocalHost2", port);
     locators.add(floc1);
     locators.add(floc2);
-    List<LocatorAddress> la = new ArrayList<>();
-    la.add(new LocatorAddress(floc1, floc1.getHostName()));
-    la.add(new LocatorAddress(floc2, floc2.getHostName()));
+    List<HostAndPort> la = new ArrayList<>();
+    la.add(new HostAndPort(floc1.getHostName(), floc1.getPort()));
+    la.add(new HostAndPort(floc2.getHostName(), floc2.getPort()));
     AutoConnectionSourceImpl src = new AutoConnectionSourceImpl(la, "", 60 * 
1000);
 
 
     InetSocketAddress b1 = new InetSocketAddress("fakeLocalHost1", port);
     InetSocketAddress b2 = new InetSocketAddress("fakeLocalHost3", port);
 
-    Set<LocatorAddress> bla = new HashSet<>();
-    bla.add(new LocatorAddress(b1, b1.getHostName()));
-    bla.add(new LocatorAddress(b2, b2.getHostName()));
+    Set<HostAndPort> bla = new HashSet<>();
+    bla.add(new HostAndPort(b1.getHostName(), b1.getPort()));
+    bla.add(new HostAndPort(b2.getHostName(), b2.getPort()));
 
 
     src.addbadLocators(la, bla);
@@ -212,13 +211,12 @@ public class AutoConnectionSourceImplJUnitTest {
   @Test
   public void testSourceHandlesToDataException() throws IOException, 
ClassNotFoundException {
     TcpClient mockConnection = mock(TcpClient.class);
-    when(mockConnection.requestToServer(isA(InetSocketAddress.class), 
any(Object.class),
+    when(mockConnection.requestToServer(isA(HostAndPort.class), 
any(Object.class),
         isA(Integer.class), isA(Boolean.class))).thenThrow(new 
ToDataException("testing"));
     try {
-      InetSocketAddress address = new 
InetSocketAddress(NetworkUtils.getServerHostName(), 1234);
-      source.queryOneLocatorUsingConnection(new LocatorAddress(address, 
"locator[1234]"), mock(
+      source.queryOneLocatorUsingConnection(new HostAndPort("locator[1234]", 
1234), mock(
           ServerLocationRequest.class), mockConnection);
-      verify(mockConnection).requestToServer(isA(InetSocketAddress.class),
+      verify(mockConnection).requestToServer(isA(HostAndPort.class),
           isA(ServerLocationRequest.class), isA(Integer.class), 
isA(Boolean.class));
     } catch (NoAvailableLocatorsException expected) {
       // do nothing
diff --git 
a/geode-core/src/integrationTest/java/org/apache/geode/distributed/LocatorIntegrationTest.java
 
b/geode-core/src/integrationTest/java/org/apache/geode/distributed/LocatorIntegrationTest.java
index e38223e..8f1c3a1 100644
--- 
a/geode-core/src/integrationTest/java/org/apache/geode/distributed/LocatorIntegrationTest.java
+++ 
b/geode-core/src/integrationTest/java/org/apache/geode/distributed/LocatorIntegrationTest.java
@@ -29,7 +29,6 @@ import static org.assertj.core.api.Assertions.catchThrowable;
 
 import java.io.File;
 import java.io.IOException;
-import java.net.InetAddress;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
@@ -51,6 +50,7 @@ import 
org.junit.runners.Parameterized.UseParametersRunnerFactory;
 
 import org.apache.geode.distributed.internal.InternalLocator;
 import org.apache.geode.distributed.internal.ServerLocation;
+import org.apache.geode.distributed.internal.tcpserver.HostAndPort;
 import org.apache.geode.distributed.internal.tcpserver.TcpClient;
 import org.apache.geode.internal.AvailablePortHelper;
 import org.apache.geode.internal.InternalDataSerializer;
@@ -174,7 +174,7 @@ public class LocatorIntegrationTest {
         .getSocketCreatorForComponent(SecurableCommunicationChannel.LOCATOR),
         InternalDataSerializer.getDSFIDSerializer().getObjectSerializer(),
         InternalDataSerializer.getDSFIDSerializer().getObjectDeserializer());
-    String[] info = client.getInfo(InetAddress.getLocalHost(), boundPort);
+    String[] info = client.getInfo(new HostAndPort("localhost", boundPort));
 
     assertThat(info).isNotNull();
     assertThat(info.length).isGreaterThanOrEqualTo(1);
diff --git 
a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/tcpserver/TCPClientSSLIntegrationTest.java
 
b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/tcpserver/TCPClientSSLIntegrationTest.java
index ef05022..38e47b3 100644
--- 
a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/tcpserver/TCPClientSSLIntegrationTest.java
+++ 
b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/tcpserver/TCPClientSSLIntegrationTest.java
@@ -146,7 +146,8 @@ public class TCPClientSSLIntegrationTest {
 
     startServerAndClient(serverCertificate, clientCertificate, true);
     String response =
-        (String) client.requestToServer(localhost, port, 
Boolean.valueOf(false), 5 * 1000);
+        (String) client.requestToServer(new 
HostAndPort(localhost.getHostAddress(), port),
+            Boolean.valueOf(false), 5 * 1000);
     assertThat(response).isEqualTo("Running!");
   }
 
@@ -165,7 +166,8 @@ public class TCPClientSSLIntegrationTest {
 
     startServerAndClient(serverCertificate, clientCertificate, false);
     String response =
-        (String) client.requestToServer(localhost, port, 
Boolean.valueOf(false), 5 * 1000);
+        (String) client.requestToServer(new 
HostAndPort(localhost.getHostAddress(), port),
+            Boolean.valueOf(false), 5 * 1000);
     assertThat(response).isEqualTo("Running!");
   }
 
@@ -184,7 +186,8 @@ public class TCPClientSSLIntegrationTest {
     startServerAndClient(serverCertificate, clientCertificate, true);
 
     assertThatExceptionOfType(IllegalStateException.class)
-        .isThrownBy(() -> client.requestToServer(localhost, port, 
Boolean.valueOf(false), 5 * 1000))
+        .isThrownBy(() -> client.requestToServer(new 
HostAndPort(localhost.getHostAddress(), port),
+            Boolean.valueOf(false), 5 * 1000))
         .withCauseInstanceOf(SSLHandshakeException.class)
         .withStackTraceContaining("No name matching " + 
localhost.getHostName() + " found");
   }
@@ -205,7 +208,8 @@ public class TCPClientSSLIntegrationTest {
     startServerAndClient(serverCertificate, clientCertificate, true);
 
     assertThatExceptionOfType(IllegalStateException.class)
-        .isThrownBy(() -> client.requestToServer(localhost, port, 
Boolean.valueOf(false), 5 * 1000))
+        .isThrownBy(() -> client.requestToServer(new 
HostAndPort(localhost.getHostAddress(), port),
+            Boolean.valueOf(false), 5 * 1000))
         .withCauseInstanceOf(SSLHandshakeException.class)
         .withStackTraceContaining("No subject alternative DNS name matching "
             + localhost.getHostName() + " found.");
diff --git 
a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/tcpserver/TCPServerSSLJUnitTest.java
 
b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/tcpserver/TCPServerSSLJUnitTest.java
index 515321f..1a5eac5 100644
--- 
a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/tcpserver/TCPServerSSLJUnitTest.java
+++ 
b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/tcpserver/TCPServerSSLJUnitTest.java
@@ -109,7 +109,7 @@ public class TCPServerSSLJUnitTest {
      */
     socketCreator.setFailTLSHandshake(false);
 
-    getTcpClient().stop(localhost, port);
+    getTcpClient().stop(new HostAndPort(localhost.getHostAddress(), port));
 
     server.join(60 * 1000);
 
@@ -121,7 +121,8 @@ public class TCPServerSSLJUnitTest {
 
     try {
 
-      getTcpClient().requestToServer(localhost, port, Boolean.valueOf(false), 
5 * 1000);
+      getTcpClient().requestToServer(new 
HostAndPort(localhost.getHostAddress(), port),
+          Boolean.valueOf(false), 5 * 1000);
       throw new AssertionError("expected to get an exception but didn't");
 
     } catch (final IllegalStateException | IOException t) {
diff --git 
a/geode-core/src/integrationTest/java/org/apache/geode/internal/net/ClientSocketFactoryIntegrationTest.java
 
b/geode-core/src/integrationTest/java/org/apache/geode/internal/net/ClientSocketFactoryIntegrationTest.java
index 7276dc4..f5bbb5b 100644
--- 
a/geode-core/src/integrationTest/java/org/apache/geode/internal/net/ClientSocketFactoryIntegrationTest.java
+++ 
b/geode-core/src/integrationTest/java/org/apache/geode/internal/net/ClientSocketFactoryIntegrationTest.java
@@ -35,6 +35,7 @@ import org.junit.experimental.categories.Category;
 import org.apache.geode.distributed.ClientSocketFactory;
 import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.distributed.internal.DistributionConfigImpl;
+import org.apache.geode.distributed.internal.tcpserver.HostAndPort;
 import org.apache.geode.test.junit.categories.ClientServerTest;
 
 /**
@@ -82,7 +83,8 @@ public class ClientSocketFactoryIntegrationTest {
   @Test
   public void testClientSocketFactory() throws Exception {
     assertThatThrownBy(() -> this.socket = SocketCreatorFactory
-        .getSocketCreatorForComponent(CLUSTER).connectForClient("localhost", 
12345, 0))
+        .getSocketCreatorForComponent(CLUSTER)
+        .connectForClient(new HostAndPort("localhost", 12345), 0))
             
.isExactlyInstanceOf(IOException.class).hasMessage(EXCEPTION_MESSAGE);
 
     assertThat(invokedCreateSocket).isTrue();
diff --git 
a/geode-core/src/integrationTest/java/org/apache/geode/internal/net/SSLSocketIntegrationTest.java
 
b/geode-core/src/integrationTest/java/org/apache/geode/internal/net/SSLSocketIntegrationTest.java
index 481313e..7be234f 100755
--- 
a/geode-core/src/integrationTest/java/org/apache/geode/internal/net/SSLSocketIntegrationTest.java
+++ 
b/geode-core/src/integrationTest/java/org/apache/geode/internal/net/SSLSocketIntegrationTest.java
@@ -72,6 +72,7 @@ import org.junit.rules.TestName;
 import org.apache.geode.distributed.internal.DMStats;
 import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.distributed.internal.DistributionConfigImpl;
+import org.apache.geode.distributed.internal.tcpserver.HostAndPort;
 import org.apache.geode.internal.ByteBufferOutputStream;
 import org.apache.geode.internal.inet.LocalHostUtil;
 import org.apache.geode.internal.security.SecurableCommunicationChannel;
@@ -180,7 +181,8 @@ public class SSLSocketIntegrationTest {
     this.serverThread = startServer(this.serverSocket, 15000);
 
     int serverPort = this.serverSocket.getLocalPort();
-    this.clientSocket = this.socketCreator.connectForServer(this.localHost, 
serverPort);
+    this.clientSocket = this.socketCreator
+        .connectForServer(new HostAndPort(this.localHost.getHostAddress(), 
serverPort));
 
     // transmit expected string from Client to Server
     ObjectOutputStream output = new 
ObjectOutputStream(this.clientSocket.getOutputStream());
@@ -408,7 +410,8 @@ public class SSLSocketIntegrationTest {
       await("connect to server socket").until(() -> {
         try {
           Socket clientSocket = socketCreator.connectForClient(
-              LocalHostUtil.getLocalHost().getHostAddress(), serverSocketPort, 
500);
+              new HostAndPort(LocalHostUtil.getLocalHost().getHostAddress(), 
serverSocketPort),
+              500);
           clientSocket.close();
           System.err.println(
               "client successfully connected to server but should not have 
been able to do so");
diff --git 
a/geode-core/src/integrationTest/java/org/apache/geode/net/SSLSocketParameterExtensionIntegrationTest.java
 
b/geode-core/src/integrationTest/java/org/apache/geode/net/SSLSocketParameterExtensionIntegrationTest.java
index 18c67d4..16f360f 100644
--- 
a/geode-core/src/integrationTest/java/org/apache/geode/net/SSLSocketParameterExtensionIntegrationTest.java
+++ 
b/geode-core/src/integrationTest/java/org/apache/geode/net/SSLSocketParameterExtensionIntegrationTest.java
@@ -58,6 +58,7 @@ import org.junit.rules.TestName;
 import org.apache.geode.cache.CacheFactory;
 import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.distributed.internal.DistributionConfigImpl;
+import org.apache.geode.distributed.internal.tcpserver.HostAndPort;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.net.SocketCreator;
 import org.apache.geode.internal.net.SocketCreatorFactory;
@@ -145,7 +146,8 @@ public class SSLSocketParameterExtensionIntegrationTest {
     this.serverThread = startServer(this.serverSocket, 15000);
 
     int serverPort = this.serverSocket.getLocalPort();
-    this.clientSocket = this.socketCreator.connectForServer(this.localHost, 
serverPort);
+    this.clientSocket = this.socketCreator
+        .connectForServer(new HostAndPort(this.localHost.getHostAddress(), 
serverPort));
 
     SSLSocket sslSocket = (SSLSocket) this.clientSocket;
 
diff --git 
a/geode-core/src/main/java/org/apache/geode/admin/internal/DistributionLocatorConfigImpl.java
 
b/geode-core/src/main/java/org/apache/geode/admin/internal/DistributionLocatorConfigImpl.java
index 60dacb1..b735ca6 100644
--- 
a/geode-core/src/main/java/org/apache/geode/admin/internal/DistributionLocatorConfigImpl.java
+++ 
b/geode-core/src/main/java/org/apache/geode/admin/internal/DistributionLocatorConfigImpl.java
@@ -15,7 +15,6 @@
 package org.apache.geode.admin.internal;
 
 import static org.apache.geode.distributed.ConfigurationProperties.MCAST_PORT;
-import static 
org.apache.geode.internal.net.InetAddressUtilsWithLogging.toInetAddress;
 import static 
org.apache.geode.internal.net.InetAddressUtilsWithLogging.validateHost;
 
 import java.net.InetAddress;
@@ -24,6 +23,7 @@ import java.util.Properties;
 import org.apache.geode.GemFireConfigException;
 import org.apache.geode.admin.DistributionLocator;
 import org.apache.geode.admin.DistributionLocatorConfig;
+import org.apache.geode.distributed.internal.tcpserver.HostAndPort;
 import org.apache.geode.distributed.internal.tcpserver.TcpClient;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.net.SocketCreatorFactory;
@@ -65,8 +65,6 @@ public class DistributionLocatorConfigImpl extends 
ManagedEntityConfigImpl
    * Contacts a distribution locator on the given host and port and creates a
    * <code>DistributionLocatorConfig</code> for it.
    *
-   * @see TcpClient#getLocatorInfo
-   *
    * @return <code>null</code> if the locator cannot be contacted
    */
   static DistributionLocatorConfig createConfigFor(String host, int port, 
InetAddress bindAddress) {
@@ -78,9 +76,9 @@ public class DistributionLocatorConfigImpl extends 
ManagedEntityConfigImpl
           InternalDataSerializer.getDSFIDSerializer().getObjectSerializer(),
           InternalDataSerializer.getDSFIDSerializer().getObjectDeserializer());
       if (bindAddress != null) {
-        info = client.getInfo(bindAddress, port);
+        info = client.getInfo(new HostAndPort(bindAddress.getHostAddress(), 
port));
       } else {
-        info = client.getInfo(toInetAddress(host), port);
+        info = client.getInfo(new HostAndPort(host, port));
       }
       if (info == null) {
         return null;
diff --git 
a/geode-core/src/main/java/org/apache/geode/admin/internal/DistributionLocatorImpl.java
 
b/geode-core/src/main/java/org/apache/geode/admin/internal/DistributionLocatorImpl.java
index 419cf60..8866975 100755
--- 
a/geode-core/src/main/java/org/apache/geode/admin/internal/DistributionLocatorImpl.java
+++ 
b/geode-core/src/main/java/org/apache/geode/admin/internal/DistributionLocatorImpl.java
@@ -212,7 +212,8 @@ public class DistributionLocatorImpl implements 
DistributionLocator, InternalMan
             found = 
locator.getHost().getHostName().equals(inetAddr.getHostName());
             if (!found) {
               found =
-                  
locator.getHost().getAddress().getHostAddress().equals(inetAddr.getHostAddress());
+                  locator.getHost().getSocketInetAddress().getAddress()
+                      .getHostAddress().equals(inetAddr.getHostAddress());
             }
           } catch (UnknownHostException e) {
             // try config host as if it is an IP address instead of host name
diff --git 
a/geode-core/src/main/java/org/apache/geode/cache/client/internal/AutoConnectionSourceImpl.java
 
b/geode-core/src/main/java/org/apache/geode/cache/client/internal/AutoConnectionSourceImpl.java
index 1714af3..94336f3 100644
--- 
a/geode-core/src/main/java/org/apache/geode/cache/client/internal/AutoConnectionSourceImpl.java
+++ 
b/geode-core/src/main/java/org/apache/geode/cache/client/internal/AutoConnectionSourceImpl.java
@@ -49,7 +49,7 @@ import 
org.apache.geode.cache.client.internal.locator.QueueConnectionResponse;
 import org.apache.geode.cache.client.internal.locator.ServerLocationRequest;
 import org.apache.geode.cache.client.internal.locator.ServerLocationResponse;
 import org.apache.geode.distributed.internal.ServerLocation;
-import org.apache.geode.distributed.internal.tcpserver.LocatorAddress;
+import org.apache.geode.distributed.internal.tcpserver.HostAndPort;
 import org.apache.geode.distributed.internal.tcpserver.TcpClient;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
@@ -74,7 +74,7 @@ public class AutoConnectionSourceImpl implements 
ConnectionSource {
   private static final LocatorListRequest LOCATOR_LIST_REQUEST = new 
LocatorListRequest();
 
   @Immutable
-  private static final Comparator<LocatorAddress> SOCKET_ADDRESS_COMPARATOR =
+  private static final Comparator<HostAndPort> SOCKET_ADDRESS_COMPARATOR =
       (address, otherAddress) -> {
         InetSocketAddress inetSocketAddress = address.getSocketInetAddress();
         InetSocketAddress otherInetSocketAddress = 
otherAddress.getSocketInetAddress();
@@ -92,7 +92,7 @@ public class AutoConnectionSourceImpl implements 
ConnectionSource {
           return inetSocketAddress.getPort() - 
otherInetSocketAddress.getPort();
         }
       };
-  private final List<LocatorAddress> initialLocators;
+  private final List<HostAndPort> initialLocators;
 
   private final String serverGroup;
   private AtomicReference<LocatorList> locators = new AtomicReference<>();
@@ -108,7 +108,7 @@ public class AutoConnectionSourceImpl implements 
ConnectionSource {
    */
   private final Map<InetSocketAddress, Exception> locatorState = new 
HashMap<>();
 
-  public AutoConnectionSourceImpl(List<LocatorAddress> contacts, String 
serverGroup,
+  public AutoConnectionSourceImpl(List<HostAndPort> contacts, String 
serverGroup,
       int handshakeTimeout) {
     this.locators.set(new LocatorList(new ArrayList<>(contacts)));
     this.onlineLocators.set(new LocatorList(Collections.emptyList()));
@@ -195,19 +195,19 @@ public class AutoConnectionSourceImpl implements 
ConnectionSource {
   }
 
 
-  private ServerLocationResponse queryOneLocator(LocatorAddress locator,
+  private ServerLocationResponse queryOneLocator(HostAndPort locator,
       ServerLocationRequest request) {
     return queryOneLocatorUsingConnection(locator, request, tcpClient);
   }
 
 
-  ServerLocationResponse queryOneLocatorUsingConnection(LocatorAddress locator,
+  ServerLocationResponse queryOneLocatorUsingConnection(HostAndPort locator,
       ServerLocationRequest request,
       TcpClient locatorConnection) {
     Object returnObj = null;
     try {
       pool.getStats().incLocatorRequests();
-      returnObj = 
locatorConnection.requestToServer(locator.getSocketInetAddress(), request,
+      returnObj = locatorConnection.requestToServer(locator, request,
           connectionTimeout, true);
       ServerLocationResponse response = (ServerLocationResponse) returnObj;
       pool.getStats().incLocatorResponses();
@@ -240,7 +240,7 @@ public class AutoConnectionSourceImpl implements 
ConnectionSource {
 
     final boolean isDebugEnabled = logger.isDebugEnabled();
     do {
-      LocatorAddress hostAddress = (LocatorAddress) controllerItr.next();
+      HostAndPort hostAddress = (HostAndPort) controllerItr.next();
       if (isDebugEnabled) {
         logger.debug("Sending query to locator {}: {}", hostAddress, request);
       }
@@ -259,14 +259,13 @@ public class AutoConnectionSourceImpl implements 
ConnectionSource {
     isBalanced = response.isBalanced();
     List<ServerLocation> locatorResponse = response.getLocators();
 
-    List<LocatorAddress> newLocatorAddresses = new 
ArrayList<>(locatorResponse.size());
-    List<LocatorAddress> newOnlineLocators = new 
ArrayList<>(locatorResponse.size());
+    List<HostAndPort> newLocatorAddresses = new 
ArrayList<>(locatorResponse.size());
+    List<HostAndPort> newOnlineLocators = new 
ArrayList<>(locatorResponse.size());
 
-    Set<LocatorAddress> badLocators = new HashSet<>(initialLocators);
+    Set<HostAndPort> badLocators = new HashSet<>(initialLocators);
 
     for (ServerLocation locator : locatorResponse) {
-      InetSocketAddress address = new InetSocketAddress(locator.getHostName(), 
locator.getPort());
-      LocatorAddress hostAddress = new LocatorAddress(address, 
locator.getHostName());
+      HostAndPort hostAddress = new HostAndPort(locator.getHostName(), 
locator.getPort());
       newLocatorAddresses.add(hostAddress);
       newOnlineLocators.add(hostAddress);
       badLocators.remove(hostAddress);
@@ -305,10 +304,10 @@ public class AutoConnectionSourceImpl implements 
ConnectionSource {
    * This method will add bad locator only when locator with hostname and port 
is not already in
    * list.
    */
-  protected void addbadLocators(List<LocatorAddress> newLocators, 
Set<LocatorAddress> badLocators) {
-    for (LocatorAddress badloc : badLocators) {
+  protected void addbadLocators(List<HostAndPort> newLocators, 
Set<HostAndPort> badLocators) {
+    for (HostAndPort badloc : badLocators) {
       boolean addIt = true;
-      for (LocatorAddress goodloc : newLocators) {
+      for (HostAndPort goodloc : newLocators) {
         boolean isSameHost = 
badloc.getHostName().equals(goodloc.getHostName());
         if (isSameHost && badloc.getPort() == goodloc.getPort()) {
           // ip has been changed so don't add this in current
@@ -374,23 +373,23 @@ public class AutoConnectionSourceImpl implements 
ConnectionSource {
    * A list of locators, which remembers the last known good locator.
    */
   private static class LocatorList {
-    protected final List<LocatorAddress> locators;
+    protected final List<HostAndPort> locators;
     AtomicInteger currentLocatorIndex = new AtomicInteger();
 
-    LocatorList(List<LocatorAddress> locators) {
+    LocatorList(List<HostAndPort> locators) {
       locators.sort(SOCKET_ADDRESS_COMPARATOR);
       this.locators = Collections.unmodifiableList(locators);
     }
 
     public List<InetSocketAddress> getLocators() {
       List<InetSocketAddress> locs = new ArrayList<>();
-      for (LocatorAddress la : locators) {
+      for (HostAndPort la : locators) {
         locs.add(la.getSocketInetAddress());
       }
       return locs;
     }
 
-    List<LocatorAddress> getLocatorAddresses() {
+    List<HostAndPort> getLocatorAddresses() {
       return locators;
     }
 
@@ -398,7 +397,7 @@ public class AutoConnectionSourceImpl implements 
ConnectionSource {
       return locators.size();
     }
 
-    public Iterator<LocatorAddress> iterator() {
+    public Iterator<HostAndPort> iterator() {
       return new LocatorIterator();
     }
 
@@ -413,7 +412,7 @@ public class AutoConnectionSourceImpl implements 
ConnectionSource {
      * controller.
      *
      */
-    protected class LocatorIterator implements Iterator<LocatorAddress> {
+    protected class LocatorIterator implements Iterator<HostAndPort> {
       private int startLocator = currentLocatorIndex.get();
       private int locatorNum = 0;
 
@@ -423,12 +422,12 @@ public class AutoConnectionSourceImpl implements 
ConnectionSource {
       }
 
       @Override
-      public LocatorAddress next() {
+      public HostAndPort next() {
         if (!hasNext()) {
           return null;
         } else {
           int index = (locatorNum + startLocator) % locators.size();
-          LocatorAddress nextLocator = locators.get(index);
+          HostAndPort nextLocator = locators.get(index);
           currentLocatorIndex.set(index);
           locatorNum++;
           return nextLocator;
diff --git 
a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ConnectionImpl.java
 
b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ConnectionImpl.java
index c149a72..0e4af88 100644
--- 
a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ConnectionImpl.java
+++ 
b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ConnectionImpl.java
@@ -32,6 +32,7 @@ import 
org.apache.geode.annotations.internal.MutableForTesting;
 import org.apache.geode.cache.wan.GatewaySender;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.ServerLocation;
+import org.apache.geode.distributed.internal.tcpserver.HostAndPort;
 import org.apache.geode.internal.cache.tier.ClientSideHandshake;
 import org.apache.geode.internal.cache.tier.CommunicationMode;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
@@ -87,7 +88,8 @@ public class ConnectionImpl implements Connection {
       ClientSideHandshake handshake, int socketBufferSize, int 
handshakeTimeout, int readTimeout,
       CommunicationMode communicationMode, GatewaySender sender, SocketCreator 
sc)
       throws IOException {
-    theSocket = sc.connectForClient(location.getHostName(), 
location.getPort(), handshakeTimeout,
+    theSocket = sc.connectForClient(new HostAndPort(location.getHostName(), 
location.getPort()),
+        handshakeTimeout,
         socketBufferSize);
     theSocket.setTcpNoDelay(true);
     theSocket.setSendBufferSize(socketBufferSize);
diff --git 
a/geode-core/src/main/java/org/apache/geode/cache/client/internal/PoolImpl.java 
b/geode-core/src/main/java/org/apache/geode/cache/client/internal/PoolImpl.java
index 4e94a8d..9f2abca 100644
--- 
a/geode-core/src/main/java/org/apache/geode/cache/client/internal/PoolImpl.java
+++ 
b/geode-core/src/main/java/org/apache/geode/cache/client/internal/PoolImpl.java
@@ -28,6 +28,7 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
 
 import org.apache.logging.log4j.Logger;
 
@@ -54,7 +55,7 @@ import org.apache.geode.distributed.PoolCancelledException;
 import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.ServerLocation;
-import org.apache.geode.distributed.internal.tcpserver.LocatorAddress;
+import org.apache.geode.distributed.internal.tcpserver.HostAndPort;
 import org.apache.geode.internal.admin.ClientStatsManager;
 import org.apache.geode.internal.cache.EventID;
 import org.apache.geode.internal.cache.InternalCache;
@@ -112,9 +113,9 @@ public class PoolImpl implements InternalPool {
   private final int subscriptionAckInterval;
   private final int subscriptionTimeoutMultiplier;
   private final String serverGroup;
-  private final List<LocatorAddress> locatorAddresses;
-  private final List<InetSocketAddress> locators;
-  private final List<InetSocketAddress> servers;
+  private final List<HostAndPort> locatorAddresses;
+  private final List<HostAndPort> locators;
+  private final List<HostAndPort> servers;
   private final boolean startDisabled;
   private final boolean usedByGateway;
   private final int maxConnections;
@@ -157,7 +158,7 @@ public class PoolImpl implements InternalPool {
   private final ThreadsMonitoring threadMonitoring;
 
   public static PoolImpl create(PoolManagerImpl pm, String name, Pool 
attributes,
-      List<LocatorAddress> locatorAddresses, InternalDistributedSystem 
distributedSystem,
+      List<HostAndPort> locatorAddresses, InternalDistributedSystem 
distributedSystem,
       InternalCache cache, ThreadsMonitoring tMonitoring) {
     PoolImpl pool =
         new PoolImpl(pm, name, attributes, locatorAddresses, 
distributedSystem, cache, tMonitoring);
@@ -187,7 +188,7 @@ public class PoolImpl implements InternalPool {
   }
 
   protected PoolImpl(PoolManagerImpl pm, String name, Pool attributes,
-      List<LocatorAddress> locatorAddresses, InternalDistributedSystem 
distributedSystem,
+      List<HostAndPort> locatorAddresses, InternalDistributedSystem 
distributedSystem,
       InternalCache cache, ThreadsMonitoring threadMonitoring) {
     this.pm = pm;
     this.name = name;
@@ -224,8 +225,11 @@ public class PoolImpl implements InternalPool {
     }
     serverGroup = attributes.getServerGroup();
     multiuserSecureModeEnabled = attributes.getMultiuserAuthentication();
-    locators = attributes.getLocators();
-    servers = attributes.getServers();
+    locators = attributes.getLocators().stream()
+        .map(x -> new HostAndPort(x.getHostName(), 
x.getPort())).collect(Collectors.toList());
+    servers = attributes.getServers().stream()
+        .map(x -> new HostAndPort(x.getHostName(), x.getPort())).collect(
+            Collectors.toList());
     startDisabled =
         ((PoolFactoryImpl.PoolAttributes) attributes).startDisabled || 
!pm.isNormal();
     usedByGateway = ((PoolFactoryImpl.PoolAttributes) attributes).isGateway();
@@ -478,7 +482,7 @@ public class PoolImpl implements InternalPool {
 
   @Override
   public List<InetSocketAddress> getLocators() {
-    return locators;
+    return locators.stream().map(x -> 
x.getSocketInetAddress()).collect(Collectors.toList());
   }
 
   @Override
@@ -488,7 +492,7 @@ public class PoolImpl implements InternalPool {
 
   @Override
   public List<InetSocketAddress> getServers() {
-    return servers;
+    return servers.stream().map(x -> 
x.getSocketInetAddress()).collect(Collectors.toList());
   }
 
   public GatewaySender getGatewaySender() {
diff --git 
a/geode-core/src/main/java/org/apache/geode/distributed/LocatorLauncher.java 
b/geode-core/src/main/java/org/apache/geode/distributed/LocatorLauncher.java
index f5860c9..29bde13 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/LocatorLauncher.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/LocatorLauncher.java
@@ -60,6 +60,7 @@ import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.client.internal.locator.LocatorStatusRequest;
 import org.apache.geode.cache.client.internal.locator.LocatorStatusResponse;
 import org.apache.geode.distributed.internal.InternalLocator;
+import org.apache.geode.distributed.internal.tcpserver.HostAndPort;
 import org.apache.geode.distributed.internal.tcpserver.TcpClient;
 import org.apache.geode.distributed.internal.tcpserver.TcpSocketCreator;
 import org.apache.geode.internal.DistributionLocator;
@@ -324,7 +325,8 @@ public class LocatorLauncher extends 
AbstractLauncher<String> {
           InternalDataSerializer.getDSFIDSerializer().getObjectSerializer(),
           InternalDataSerializer.getDSFIDSerializer().getObjectDeserializer());
 
-      return (LocatorStatusResponse) client.requestToServer(bindAddress, port,
+      return (LocatorStatusResponse) client.requestToServer(
+          new HostAndPort(bindAddress.getHostAddress(), port),
           new LocatorStatusRequest(), timeout, true);
     } catch (ClassNotFoundException e) {
       throw new RuntimeException(e);
diff --git 
a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/InternalDistributedMember.java
 
b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/InternalDistributedMember.java
index ac2bf6b..565d247 100755
--- 
a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/InternalDistributedMember.java
+++ 
b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/InternalDistributedMember.java
@@ -33,8 +33,6 @@ import org.jgroups.util.UUID;
 import org.apache.geode.InternalGemFireError;
 import org.apache.geode.annotations.Immutable;
 import org.apache.geode.annotations.VisibleForTesting;
-import org.apache.geode.annotations.internal.MutableForTesting;
-import org.apache.geode.cache.client.ServerConnectivityException;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.DurableClientAttributes;
 import org.apache.geode.distributed.Role;
@@ -66,11 +64,6 @@ public class InternalDistributedMember
   public static final MemberIdentifierFactoryImpl MEMBER_IDENTIFIER_FACTORY =
       new MemberIdentifierFactoryImpl();
 
-  /** Retrieves an InetAddress given the provided hostname */
-  @MutableForTesting
-  protected static HostnameResolver hostnameResolver =
-      (location) -> InetAddress.getByName(location.getHostName());
-
   private final MemberIdentifier memberIdentifier;
 
   @VisibleForTesting
@@ -145,7 +138,8 @@ public class InternalDistributedMember
 
   /**
    * Creates a new InternalDistributedMember for use in notifying listeners in 
client
-   * caches. The version information in the ID is set to Version.CURRENT.
+   * caches. The version information in the ID is set to Version.CURRENT and 
the host name
+   * is left unresolved (DistributedMember doesn't expose the InetAddress).
    *
    * @param location the coordinates of the server
    */
@@ -153,23 +147,13 @@ public class InternalDistributedMember
   public InternalDistributedMember(ServerLocation location) {
     memberIdentifier =
         MEMBER_IDENTIFIER_FACTORY.create(
-            MemberDataBuilder.newBuilder(getInetAddress(location), 
location.getHostName())
+            MemberDataBuilder.newBuilderForLocalHost(location.getHostName())
                 .setMembershipPort(location.getPort())
                 .setNetworkPartitionDetectionEnabled(false)
                 .setPreferredForCoordinator(true)
                 .build());
   }
 
-  private static InetAddress getInetAddress(ServerLocation location) {
-    final InetAddress addr;
-    try {
-      addr = hostnameResolver.getInetAddress(location);
-    } catch (UnknownHostException e) {
-      throw new ServerConnectivityException("Unable to resolve server location 
" + location, e);
-    }
-    return addr;
-  }
-
   /**
    * Create a InternalDistributedMember referring to the current host (as 
defined by the given
    * string) with additional info including optional connection name and an 
optional unique string.
@@ -267,10 +251,6 @@ public class InternalDistributedMember
     return mbr;
   }
 
-  public static void setHostnameResolver(final HostnameResolver 
hostnameResolver) {
-    InternalDistributedMember.hostnameResolver = hostnameResolver;
-  }
-
   /**
    * Returns this client member's durable attributes or null if no durable 
attributes were created.
    */
diff --git 
a/geode-core/src/main/java/org/apache/geode/internal/DistributionLocator.java 
b/geode-core/src/main/java/org/apache/geode/internal/DistributionLocator.java
index 82c0e26..2842794 100644
--- 
a/geode-core/src/main/java/org/apache/geode/internal/DistributionLocator.java
+++ 
b/geode-core/src/main/java/org/apache/geode/internal/DistributionLocator.java
@@ -27,6 +27,7 @@ import org.apache.geode.SystemFailure;
 import org.apache.geode.annotations.internal.MakeNotStatic;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.InternalLocator;
+import org.apache.geode.distributed.internal.tcpserver.HostAndPort;
 import org.apache.geode.distributed.internal.tcpserver.TcpClient;
 import org.apache.geode.internal.net.SocketCreatorFactory;
 import org.apache.geode.internal.security.SecurableCommunicationChannel;
@@ -73,8 +74,9 @@ public class DistributionLocator {
       new TcpClient(SocketCreatorFactory
           .getSocketCreatorForComponent(SecurableCommunicationChannel.LOCATOR),
           InternalDataSerializer.getDSFIDSerializer().getObjectSerializer(),
-          
InternalDataSerializer.getDSFIDSerializer().getObjectDeserializer()).stop(addr,
-              port);
+          InternalDataSerializer.getDSFIDSerializer().getObjectDeserializer())
+              .stop(new HostAndPort(addr.getHostName(),
+                  port));
     } catch (ConnectException ignore) {
       // must not be running
     }
diff --git 
a/geode-core/src/main/java/org/apache/geode/internal/SystemAdmin.java 
b/geode-core/src/main/java/org/apache/geode/internal/SystemAdmin.java
index 33a15a5..624b04c 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/SystemAdmin.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/SystemAdmin.java
@@ -79,6 +79,7 @@ import 
org.apache.geode.distributed.internal.DistributionConfigImpl;
 import org.apache.geode.distributed.internal.HighPriorityAckedMessage;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import 
org.apache.geode.distributed.internal.membership.InternalDistributedMember;
+import org.apache.geode.distributed.internal.tcpserver.HostAndPort;
 import org.apache.geode.distributed.internal.tcpserver.TcpClient;
 import org.apache.geode.internal.admin.remote.TailLogResponse;
 import org.apache.geode.internal.cache.DiskStoreImpl;
@@ -298,7 +299,7 @@ public class SystemAdmin {
             
.getSocketCreatorForComponent(SecurableCommunicationChannel.LOCATOR),
             InternalDataSerializer.getDSFIDSerializer().getObjectSerializer(),
             
InternalDataSerializer.getDSFIDSerializer().getObjectDeserializer())
-                .stop(addr, port);
+                .stop(new HostAndPort(addr.getHostName(), port));
       } catch (java.net.ConnectException ce) {
         System.out.println(
             "Unable to connect to Locator process. Possible causes are that an 
incorrect bind address/port combination was specified to the stop-locator 
command or the process is unresponsive.");
diff --git 
a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/DistributionLocatorId.java
 
b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/DistributionLocatorId.java
index c6f0874..8835115 100644
--- 
a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/DistributionLocatorId.java
+++ 
b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/DistributionLocatorId.java
@@ -16,18 +16,17 @@
 package org.apache.geode.internal.admin.remote;
 
 import java.net.InetAddress;
-import java.net.InetSocketAddress;
 import java.net.UnknownHostException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 
 import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.validator.routines.InetAddressValidator;
 
 import org.apache.geode.InternalGemFireException;
 import org.apache.geode.distributed.Locator;
 import org.apache.geode.distributed.internal.DistributionConfig;
+import org.apache.geode.distributed.internal.tcpserver.HostAndPort;
 import org.apache.geode.internal.admin.SSLConfig;
 import org.apache.geode.internal.inet.LocalHostUtil;
 import org.apache.geode.internal.net.SocketCreator;
@@ -221,24 +220,15 @@ public class DistributionLocatorId implements 
java.io.Serializable {
    * ipString Otherwise we create InetAddress each time.
    *
    **/
-  public InetSocketAddress getHost() throws UnknownHostException {
-    if (this.hostname != null) {
-      boolean isIpString = 
InetAddressValidator.getInstance().isValid(this.hostname);
-      if (isIpString) {
-        if (this.host == null) {
-          this.host = InetAddress.getByName(this.hostname);
-        }
-        return new InetSocketAddress(this.host, this.port);
-      }
-    }
-
-    if (this.hostname == null) {
-      if (this.host != null) {
-        return new InetSocketAddress(this.host, this.port);
-      }
+  public HostAndPort getHost() throws UnknownHostException {
+    if (host == null && hostname == null) {
       throw new UnknownHostException("locator ID has no hostname or resolved 
inet address");
     }
-    return new InetSocketAddress(this.hostname, this.port);
+    String addr = hostname;
+    if (host != null) {
+      addr = host.getHostAddress();
+    }
+    return new HostAndPort(addr, port);
   }
 
   /** returns the host name */
diff --git 
a/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
 
b/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
index 88be1f8..d4aff7f 100755
--- 
a/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
+++ 
b/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
@@ -2651,7 +2651,8 @@ public class GemFireCacheImpl implements InternalCache, 
InternalClientCache, Has
         if (result == null) {
           result = new HashSet<>();
         }
-        result.add(new InetSocketAddress(serverLocation.getHostName(), 
serverLocation.getPort()));
+        
result.add(InetSocketAddress.createUnresolved(serverLocation.getHostName(),
+            serverLocation.getPort()));
       }
     }
     if (result == null) {
diff --git 
a/geode-core/src/main/java/org/apache/geode/internal/cache/PoolFactoryImpl.java 
b/geode-core/src/main/java/org/apache/geode/internal/cache/PoolFactoryImpl.java
index 09be556..708ce2a 100644
--- 
a/geode-core/src/main/java/org/apache/geode/internal/cache/PoolFactoryImpl.java
+++ 
b/geode-core/src/main/java/org/apache/geode/internal/cache/PoolFactoryImpl.java
@@ -22,10 +22,10 @@ import java.net.InetAddress;
 import java.net.InetSocketAddress;
 import java.net.UnknownHostException;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 import org.apache.logging.log4j.Logger;
 
@@ -40,7 +40,7 @@ import org.apache.geode.cache.client.internal.PoolImpl;
 import org.apache.geode.cache.query.QueryService;
 import org.apache.geode.cache.wan.GatewaySender;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
-import org.apache.geode.distributed.internal.tcpserver.LocatorAddress;
+import org.apache.geode.distributed.internal.tcpserver.HostAndPort;
 import org.apache.geode.internal.monitoring.ThreadsMonitoring;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.pdx.internal.TypeRegistry;
@@ -58,7 +58,7 @@ public class PoolFactoryImpl implements InternalPoolFactory {
    */
   private PoolAttributes attributes = new PoolAttributes();
 
-  private final List<LocatorAddress> locatorAddresses = new ArrayList<>();
+  private final List<HostAndPort> locatorAddresses = new ArrayList<>();
 
   /**
    * The cache that created this factory
@@ -286,9 +286,9 @@ public class PoolFactoryImpl implements InternalPoolFactory 
{
       throw new IllegalStateException(
           "A server has already been added. You can only add locators or 
servers; not both.");
     }
-    InetSocketAddress isa = getInetSocketAddress(host, port);
-    attributes.locators.add(isa);
-    locatorAddresses.add(new LocatorAddress(isa, host));
+    HostAndPort address = new HostAndPort(host, port);
+    attributes.locators.add(address);
+    locatorAddresses.add(address);
     return this;
   }
 
@@ -298,7 +298,7 @@ public class PoolFactoryImpl implements InternalPoolFactory 
{
       throw new IllegalStateException(
           "A locator has already been added. You can only add locators or 
servers; not both.");
     }
-    attributes.servers.add(getInetSocketAddress(host, port));
+    attributes.servers.add(new HostAndPort(host, port));
     return this;
   }
 
@@ -332,10 +332,11 @@ public class PoolFactoryImpl implements 
InternalPoolFactory {
     setSubscriptionAckInterval(cp.getSubscriptionAckInterval());
     setServerGroup(cp.getServerGroup());
     setMultiuserAuthentication(cp.getMultiuserAuthentication());
-    for (InetSocketAddress inetSocketAddress : cp.getLocators()) {
-      addLocator(inetSocketAddress.getHostName(), inetSocketAddress.getPort());
+    for (InetSocketAddress address : cp.getLocators()) {
+      addLocator(address.getHostName(), address.getPort());
     }
-    attributes.servers.addAll(cp.getServers());
+    attributes.servers.addAll(cp.getServers().stream()
+        .map(x -> new HostAndPort(x.getHostName(), 
x.getPort())).collect(Collectors.toList()));
   }
 
   public void init(GatewaySender sender) {
@@ -430,8 +431,8 @@ public class PoolFactoryImpl implements InternalPoolFactory 
{
     int subscriptionTimeoutMultipler = DEFAULT_SUBSCRIPTION_TIMEOUT_MULTIPLIER;
     public String serverGroup = DEFAULT_SERVER_GROUP;
     boolean multiuserSecureModeEnabled = DEFAULT_MULTIUSER_AUTHENTICATION;
-    public ArrayList<InetSocketAddress> locators = new ArrayList<>();
-    public ArrayList<InetSocketAddress> servers = new ArrayList<>();
+    public ArrayList<HostAndPort> locators = new ArrayList<>();
+    public ArrayList<HostAndPort> servers = new ArrayList<>();
     public transient boolean startDisabled = false; // only used by junit tests
     public transient LocatorDiscoveryCallback locatorCallback = null; // only 
used by tests
     public GatewaySender gatewaySender = null;
@@ -567,7 +568,7 @@ public class PoolFactoryImpl implements InternalPoolFactory 
{
         throw new IllegalStateException(
             "At least one locator or server must be added before a connection 
pool can be created.");
       }
-      return Collections.unmodifiableList(new ArrayList<>(locators));
+      return locators.stream().map(x -> 
x.getSocketInetAddress()).collect(Collectors.toList());
     }
 
     @Override
@@ -582,7 +583,7 @@ public class PoolFactoryImpl implements InternalPoolFactory 
{
             "At least one locator or server must be added before a connection 
pool can be created.");
       }
       // needs to return a copy.
-      return Collections.unmodifiableList(new ArrayList<>(servers));
+      return servers.stream().map(x -> 
x.getSocketInetAddress()).collect(Collectors.toList());
     }
 
     @Override
diff --git 
a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientUpdater.java
 
b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientUpdater.java
index 64eaa1c..2d87ab3 100644
--- 
a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientUpdater.java
+++ 
b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientUpdater.java
@@ -59,6 +59,7 @@ import 
org.apache.geode.distributed.internal.InternalDistributedSystem;
 import 
org.apache.geode.distributed.internal.InternalDistributedSystem.DisconnectListener;
 import org.apache.geode.distributed.internal.ServerLocation;
 import 
org.apache.geode.distributed.internal.membership.InternalDistributedMember;
+import org.apache.geode.distributed.internal.tcpserver.HostAndPort;
 import org.apache.geode.internal.Assert;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.InternalInstantiator;
@@ -315,7 +316,8 @@ public class CacheClientUpdater extends LoggingThread 
implements ClientUpdater,
       int socketBufferSize =
           Integer.getInteger("BridgeServer.SOCKET_BUFFER_SIZE", 
DEFAULT_SOCKET_BUFFER_SIZE);
 
-      mySock = socketCreator.connectForClient(location.getHostName(), 
location.getPort(),
+      mySock = socketCreator.connectForClient(
+          new HostAndPort(location.getHostName(), location.getPort()),
           handshakeTimeout, socketBufferSize);
       mySock.setTcpNoDelay(true);
       mySock.setSendBufferSize(socketBufferSize);
diff --git 
a/geode-core/src/main/java/org/apache/geode/internal/net/SocketCreator.java 
b/geode-core/src/main/java/org/apache/geode/internal/net/SocketCreator.java
index 427e758..0c5df6a 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/net/SocketCreator.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/net/SocketCreator.java
@@ -73,6 +73,7 @@ import org.apache.geode.distributed.ClientSocketFactory;
 import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.distributed.internal.DistributionConfigImpl;
 import org.apache.geode.distributed.internal.tcpserver.ConnectionWatcher;
+import org.apache.geode.distributed.internal.tcpserver.HostAndPort;
 import org.apache.geode.distributed.internal.tcpserver.TcpSocketCreatorImpl;
 import org.apache.geode.internal.ClassPathLoader;
 import org.apache.geode.internal.admin.SSLConfig;
@@ -613,23 +614,23 @@ public class SocketCreator extends TcpSocketCreatorImpl {
   /**
    * Return a client socket. This method is used by client/server clients.
    */
-  public Socket connectForClient(String host, int port, int timeout) throws 
IOException {
-    return connect(InetAddress.getByName(host), port, timeout, null, true, -1);
+  public Socket connectForClient(HostAndPort addr, int timeout) throws 
IOException {
+    return connect(addr, timeout, null, true, -1);
   }
 
   /**
    * Return a client socket. This method is used by client/server clients.
    */
-  public Socket connectForClient(String host, int port, int timeout, int 
socketBufferSize)
+  public Socket connectForClient(HostAndPort addr, int timeout, int 
socketBufferSize)
       throws IOException {
-    return connect(InetAddress.getByName(host), port, timeout, null, true, 
socketBufferSize);
+    return connect(addr, timeout, null, true, socketBufferSize);
   }
 
   /**
    * Return a client socket. This method is used by peers.
    */
-  public Socket connectForServer(InetAddress inetadd, int port) throws 
IOException {
-    return connect(inetadd, port, 0, null, false, -1);
+  public Socket connectForServer(HostAndPort addr) throws IOException {
+    return connect(addr, 0, null, false, -1);
   }
 
   /**
@@ -637,10 +638,10 @@ public class SocketCreator extends TcpSocketCreatorImpl {
    * <i>timeout</i> is ignored if SSL is being used, as there is no timeout 
argument in the ssl
    * socket factory
    */
-  public Socket connect(InetAddress inetadd, int port, int timeout,
+  public Socket connect(HostAndPort addr, int timeout,
       ConnectionWatcher optionalWatcher, boolean clientSide, int 
socketBufferSize)
       throws IOException {
-    return connect(inetadd, port, timeout, optionalWatcher, clientSide, 
socketBufferSize,
+    return connect(addr, timeout, optionalWatcher, clientSide, 
socketBufferSize,
         sslConfig.isEnabled());
   }
 
@@ -650,21 +651,21 @@ public class SocketCreator extends TcpSocketCreatorImpl {
    * socket factory
    */
   @Override
-  public Socket connect(InetAddress inetadd, int port, int timeout,
+  public Socket connect(HostAndPort addr, int timeout,
       ConnectionWatcher optionalWatcher, boolean clientSide, int 
socketBufferSize,
       boolean sslConnection) throws IOException {
 
     printConfig();
 
     if (!sslConnection) {
-      return super.connect(inetadd, port, timeout, optionalWatcher, 
clientSide, socketBufferSize,
+      return super.connect(addr, timeout, optionalWatcher, clientSide, 
socketBufferSize,
           sslConnection);
     }
 
     // create an SSL connection
 
     Socket socket;
-    SocketAddress sockaddr = new InetSocketAddress(inetadd, port);
+    SocketAddress sockaddr = addr.getSocketInetAddress();
     if (this.sslContext == null) {
       throw new GemFireConfigException(
           "SSL not configured correctly, Please look at previous error");
@@ -698,9 +699,11 @@ public class SocketCreator extends TcpSocketCreatorImpl {
   }
 
   @Override
-  protected Socket createCustomClientSocket(InetAddress inetadd, int port) 
throws IOException {
+  protected Socket createCustomClientSocket(HostAndPort addr) throws 
IOException {
     if (this.clientSocketFactory != null) {
-      return this.clientSocketFactory.createSocket(inetadd, port);
+      InetSocketAddress inetSocketAddress = addr.getSocketInetAddress();
+      return 
this.clientSocketFactory.createSocket(inetSocketAddress.getAddress(),
+          inetSocketAddress.getPort());
     }
     return null;
   }
diff --git 
a/geode-core/src/main/java/org/apache/geode/management/internal/ContextAwareSSLRMIClientSocketFactory.java
 
b/geode-core/src/main/java/org/apache/geode/management/internal/ContextAwareSSLRMIClientSocketFactory.java
index cadb2b2..7025edc 100644
--- 
a/geode-core/src/main/java/org/apache/geode/management/internal/ContextAwareSSLRMIClientSocketFactory.java
+++ 
b/geode-core/src/main/java/org/apache/geode/management/internal/ContextAwareSSLRMIClientSocketFactory.java
@@ -27,6 +27,7 @@ import java.util.Properties;
 import javax.rmi.ssl.SslRMIClientSocketFactory;
 
 import org.apache.geode.annotations.Immutable;
+import org.apache.geode.distributed.internal.tcpserver.HostAndPort;
 import org.apache.geode.internal.admin.SSLConfig;
 import org.apache.geode.internal.net.SSLConfigurationFactory;
 import org.apache.geode.internal.net.SocketCreator;
@@ -54,7 +55,7 @@ public class ContextAwareSSLRMIClientSocketFactory implements 
RMIClientSocketFac
     try {
       socketCreator =
           
SocketCreatorFactory.getSocketCreatorForComponent(SecurableCommunicationChannel.JMX);
-      return socketCreator.connectForClient(host, port, 0);
+      return socketCreator.connectForClient(new HostAndPort(host, port), 0);
     } catch (Exception exception) {
       try {
         // In gfsh the ssl config is stored within the 
GEODE_SSL_CONFIG_PROPERTIES system property.
@@ -64,7 +65,7 @@ public class ContextAwareSSLRMIClientSocketFactory implements 
RMIClientSocketFac
         SSLConfig sslConfig = SSLConfigurationFactory
             .getSSLConfigForComponent(gfProperties, 
SecurableCommunicationChannel.JMX);
         socketCreator = new SocketCreator(sslConfig);
-        return socketCreator.connectForClient(host, port, 0);
+        return socketCreator.connectForClient(new HostAndPort(host, port), 0);
       } catch (Exception finalException) {
         // Back off and use the default factory (javax.net.ssl properties are 
used to configure
         // SSL).
diff --git 
a/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocatorRequest.java
 
b/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocatorRequest.java
index 2ce9a80..cd87917 100644
--- 
a/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocatorRequest.java
+++ 
b/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocatorRequest.java
@@ -17,11 +17,10 @@ package org.apache.geode.management.internal;
 import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
 import java.util.Properties;
 
 import org.apache.geode.annotations.Immutable;
+import org.apache.geode.distributed.internal.tcpserver.HostAndPort;
 import org.apache.geode.distributed.internal.tcpserver.TcpClient;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.admin.SSLConfig;
@@ -77,8 +76,6 @@ public class JmxManagerLocatorRequest implements 
DataSerializableFixedID {
    */
   public static JmxManagerLocatorResponse send(String locatorHost, int 
locatorPort, int msTimeout,
       Properties sslConfigProps) throws IOException, ClassNotFoundException {
-    InetAddress networkAddress = InetAddress.getByName(locatorHost);
-    InetSocketAddress inetSockAddr = new InetSocketAddress(networkAddress, 
locatorPort);
 
     // simply need to turn sslConfigProps into sslConfig for locator
     SSLConfig sslConfig = 
SSLConfigurationFactory.getSSLConfigForComponent(sslConfigProps,
@@ -87,7 +84,8 @@ public class JmxManagerLocatorRequest implements 
DataSerializableFixedID {
     TcpClient client = new TcpClient(socketCreator,
         InternalDataSerializer.getDSFIDSerializer().getObjectSerializer(),
         InternalDataSerializer.getDSFIDSerializer().getObjectDeserializer());
-    Object responseFromServer = client.requestToServer(inetSockAddr, 
SINGLETON, msTimeout, true);
+    Object responseFromServer = client.requestToServer(new 
HostAndPort(locatorHost, locatorPort),
+        SINGLETON, msTimeout, true);
 
     if (responseFromServer instanceof JmxManagerLocatorResponse)
       return (JmxManagerLocatorResponse) responseFromServer;
diff --git 
a/geode-core/src/main/java/org/apache/geode/management/internal/api/GeodeConnectionConfig.java
 
b/geode-core/src/main/java/org/apache/geode/management/internal/api/GeodeConnectionConfig.java
index 8cfbeb2..183c913 100644
--- 
a/geode-core/src/main/java/org/apache/geode/management/internal/api/GeodeConnectionConfig.java
+++ 
b/geode-core/src/main/java/org/apache/geode/management/internal/api/GeodeConnectionConfig.java
@@ -34,6 +34,7 @@ import org.apache.geode.cache.execute.FunctionService;
 import org.apache.geode.cache.execute.ResultCollector;
 import org.apache.geode.distributed.internal.DistributionConfig;
 import 
org.apache.geode.distributed.internal.membership.InternalDistributedMember;
+import org.apache.geode.distributed.internal.tcpserver.HostAndPort;
 import org.apache.geode.distributed.internal.tcpserver.TcpClient;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.admin.SSLConfig;
@@ -107,7 +108,8 @@ public class GeodeConnectionConfig extends ConnectionConfig 
{
     cmsInfo = null;
     for (InetSocketAddress locator : locators) {
       try {
-        cmsInfo = (ClusterManagementServiceInfo) 
client.requestToServer(locator,
+        cmsInfo = (ClusterManagementServiceInfo) client.requestToServer(
+            new HostAndPort(locator.getHostName(), locator.getPort()),
             new ClusterManagementServiceInfoRequest(), 1000, true);
 
         // do not try anymore if we found one that has cms running
diff --git 
a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/utils/ClusterConfigurationStatusRetriever.java
 
b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/utils/ClusterConfigurationStatusRetriever.java
index 5e72d0d..bceb0fe 100644
--- 
a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/utils/ClusterConfigurationStatusRetriever.java
+++ 
b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/utils/ClusterConfigurationStatusRetriever.java
@@ -16,11 +16,11 @@ package 
org.apache.geode.management.internal.configuration.utils;
 
 
 import java.io.IOException;
-import java.net.InetAddress;
 import java.util.Properties;
 import java.util.Set;
 
 import org.apache.geode.distributed.LocatorLauncher;
+import org.apache.geode.distributed.internal.tcpserver.HostAndPort;
 import org.apache.geode.distributed.internal.tcpserver.TcpClient;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.cache.persistence.PersistentMemberPattern;
@@ -37,15 +37,14 @@ public class ClusterConfigurationStatusRetriever {
       throws ClassNotFoundException, IOException {
     final StringBuilder buffer = new StringBuilder();
 
-    final InetAddress networkAddress = InetAddress.getByName(locatorHostName);
-
     TcpClient client = new TcpClient(
         new 
SocketCreator(SSLConfigurationFactory.getSSLConfigForComponent(configProps,
             SecurableCommunicationChannel.LOCATOR)),
         InternalDataSerializer.getDSFIDSerializer().getObjectSerializer(),
         InternalDataSerializer.getDSFIDSerializer().getObjectDeserializer());
+    HostAndPort locatorAddress = new HostAndPort(locatorHostName, locatorPort);
     SharedConfigurationStatusResponse statusResponse =
-        (SharedConfigurationStatusResponse) 
client.requestToServer(networkAddress, locatorPort,
+        (SharedConfigurationStatusResponse) 
client.requestToServer(locatorAddress,
             new SharedConfigurationStatusRequest(), 10000, true);
 
     for (int i = 0; i < NUM_ATTEMPTS_FOR_SHARED_CONFIGURATION_STATUS; i++) {
@@ -54,8 +53,8 @@ public class ClusterConfigurationStatusRetriever {
           || statusResponse.getStatus().equals(
               
org.apache.geode.management.internal.configuration.domain.SharedConfigurationStatus.NOT_STARTED))
 {
         statusResponse =
-            (SharedConfigurationStatusResponse) 
client.requestToServer(networkAddress,
-                locatorPort, new SharedConfigurationStatusRequest(), 10000, 
true);
+            (SharedConfigurationStatusResponse) 
client.requestToServer(locatorAddress,
+                new SharedConfigurationStatusRequest(), 10000, true);
         try {
           Thread.sleep(5000);
         } catch (InterruptedException e) {
diff --git 
a/geode-core/src/test/java/org/apache/geode/cache/client/internal/PoolImplTest.java
 
b/geode-core/src/test/java/org/apache/geode/cache/client/internal/PoolImplTest.java
index 5487f42..80cade1 100644
--- 
a/geode-core/src/test/java/org/apache/geode/cache/client/internal/PoolImplTest.java
+++ 
b/geode-core/src/test/java/org/apache/geode/cache/client/internal/PoolImplTest.java
@@ -37,7 +37,7 @@ import 
org.apache.geode.cache.client.ServerConnectivityException;
 import org.apache.geode.cache.client.internal.pooling.ConnectionManagerImpl;
 import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
-import org.apache.geode.distributed.internal.tcpserver.LocatorAddress;
+import org.apache.geode.distributed.internal.tcpserver.HostAndPort;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.PoolFactoryImpl;
 import org.apache.geode.internal.cache.PoolManagerImpl;
@@ -154,7 +154,7 @@ public class PoolImplTest {
 
     final ThreadsMonitoring tMonitoring = mock(ThreadsMonitoring.class);
 
-    return PoolImpl.create(poolManager, "pool", poolAttributes, new 
LinkedList<LocatorAddress>(),
+    return PoolImpl.create(poolManager, "pool", poolAttributes, new 
LinkedList<HostAndPort>(),
         internalDistributedSystem, internalCache, tMonitoring);
   }
 
diff --git 
a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/CacheClientUpdaterJUnitTest.java
 
b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/CacheClientUpdaterJUnitTest.java
index d2572e9..2e71bdb 100644
--- 
a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/CacheClientUpdaterJUnitTest.java
+++ 
b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/CacheClientUpdaterJUnitTest.java
@@ -31,6 +31,7 @@ import org.apache.geode.cache.client.internal.EndpointManager;
 import org.apache.geode.cache.client.internal.QueueManager;
 import org.apache.geode.distributed.DistributedSystem;
 import org.apache.geode.distributed.internal.ServerLocation;
+import org.apache.geode.distributed.internal.tcpserver.HostAndPort;
 import org.apache.geode.internal.cache.tier.ClientSideHandshake;
 import org.apache.geode.internal.net.SocketCreator;
 import org.apache.geode.test.junit.categories.ClientSubscriptionTest;
@@ -57,7 +58,7 @@ public class CacheClientUpdaterJUnitTest {
 
     // engineer a failure to connect via SocketCreator
     SocketCreator socketCreator = mock(SocketCreator.class);
-    when(socketCreator.connectForClient(any(String.class), any(Integer.class),
+    when(socketCreator.connectForClient(any(HostAndPort.class),
         any(Integer.class), any(Integer.class))).thenThrow(new 
SocketException("ouch"));
 
     // mock some stats that we can then use to ensure that they're closed when 
the problem occurs
diff --git 
a/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/GMSUtilTest.java
 
b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/GMSUtilTest.java
index f448aae..4a1ed00 100644
--- 
a/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/GMSUtilTest.java
+++ 
b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/GMSUtilTest.java
@@ -20,7 +20,6 @@ import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import java.net.InetAddress;
-import java.net.InetSocketAddress;
 import java.util.List;
 
 import junitparams.JUnitParamsRunner;
@@ -29,7 +28,7 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 
 import 
org.apache.geode.distributed.internal.membership.api.MembershipConfigurationException;
-import 
org.apache.geode.distributed.internal.membership.gms.membership.HostAddress;
+import org.apache.geode.distributed.internal.tcpserver.HostAndPort;
 
 @RunWith(JUnitParamsRunner.class)
 public class GMSUtilTest {
@@ -49,8 +48,7 @@ public class GMSUtilTest {
         parseLocators(RESOLVEABLE_LOOPBACK_HOST + "[" + PORT + "]",
             InetAddress.getLoopbackAddress()))
                 .contains(
-                    new HostAddress(new 
InetSocketAddress(RESOLVEABLE_LOOPBACK_HOST, PORT),
-                        RESOLVEABLE_LOOPBACK_HOST));
+                    new HostAndPort(RESOLVEABLE_LOOPBACK_HOST, PORT));
   }
 
   @Test
@@ -73,11 +71,10 @@ public class GMSUtilTest {
 
   @Test
   public void unresolveableAddressNotChecked() throws 
MembershipConfigurationException {
-    final List<HostAddress> hostAddresses =
+    final List<HostAndPort> HostAndPortes =
         parseLocators(UNRESOLVEABLE_HOST + "[" + PORT + "]", (InetAddress) 
null);
-    assertThat(hostAddresses)
-        .contains(new HostAddress(new InetSocketAddress(UNRESOLVEABLE_HOST, 
PORT),
-            UNRESOLVEABLE_HOST));
+    assertThat(HostAndPortes)
+        .contains(new HostAndPort(UNRESOLVEABLE_HOST, PORT));
   }
 
   @Test
@@ -86,8 +83,7 @@ public class GMSUtilTest {
     final String locatorsString = RESOLVEABLE_LOOPBACK_HOST + "[" + validPort 
+ "]";
     assertThat(parseLocators(locatorsString, InetAddress.getLoopbackAddress()))
         .contains(
-            new HostAddress(new InetSocketAddress(RESOLVEABLE_LOOPBACK_HOST, 
validPort),
-                RESOLVEABLE_LOOPBACK_HOST));
+            new HostAndPort(RESOLVEABLE_LOOPBACK_HOST, validPort));
   }
 
   @Test
@@ -106,7 +102,7 @@ public class GMSUtilTest {
       throws MembershipConfigurationException {
     assertThat(parseLocators(locatorsString, (InetAddress) null))
         .contains(
-            new HostAddress(new InetSocketAddress("127.0.0.1", 1234), 
"127.0.0.1"));
+            new HostAndPort("127.0.0.1", 1234));
   }
 
   @Test
@@ -115,23 +111,20 @@ public class GMSUtilTest {
       throws MembershipConfigurationException {
     assertThat(parseLocators(locatorsString, (InetAddress) null))
         .contains(
-            new HostAddress(new InetSocketAddress("fdf0:76cf:a0ed:9449::5", 
12233),
-                "fdf0:76cf:a0ed:9449::5"));
+            new HostAndPort("fdf0:76cf:a0ed:9449::5", 12233));
   }
 
   @Test
   public void multipleHosts() throws MembershipConfigurationException {
-    final List<HostAddress> addys =
+    final List<HostAndPort> addys =
         parseLocators(
             "geodecluster-sample-locator-0.geodecluster-sample-locator[10334],"
                 + 
"geodecluster-sample-locator-1.geodecluster-sample-locator[10334],"
                 + 
"geodecluster-sample-locator-2.geodecluster-sample-locator[10334]",
             (InetAddress) null);
     assertThat(addys).contains(
-        new HostAddress(
-            new 
InetSocketAddress("geodecluster-sample-locator-2.geodecluster-sample-locator",
-                10334),
-            "geodecluster-sample-locator-2.geodecluster-sample-locator"));
+        new 
HostAndPort("geodecluster-sample-locator-2.geodecluster-sample-locator",
+            10334));
     assertThat(addys).hasSize(3);
   }
 
@@ -149,12 +142,11 @@ public class GMSUtilTest {
   @Test
   public void nonLoopbackBindAddressDoesNotResolveLocatorAddress()
       throws MembershipConfigurationException {
-    final List<HostAddress> hostAddresses =
+    final List<HostAndPort> hostAndPorts =
         parseLocators(UNRESOLVEABLE_HOST + "[" + PORT + "]",
             RESOLVEABLE_NON_LOOPBACK_HOST);
-    assertThat(hostAddresses)
-        .contains(new HostAddress(new InetSocketAddress(UNRESOLVEABLE_HOST, 
PORT),
-            UNRESOLVEABLE_HOST));
+    assertThat(hostAndPorts)
+        .contains(new HostAndPort(UNRESOLVEABLE_HOST, PORT));
   }
 
 }
diff --git 
a/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeaveJUnitTest.java
 
b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeaveJUnitTest.java
index e98dfde..c65f8ef 100644
--- 
a/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeaveJUnitTest.java
+++ 
b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeaveJUnitTest.java
@@ -35,7 +35,6 @@ import static org.mockito.Mockito.when;
 
 import java.io.IOException;
 import java.net.InetAddress;
-import java.net.InetSocketAddress;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -82,6 +81,7 @@ import 
org.apache.geode.distributed.internal.membership.gms.messages.NetworkPart
 import 
org.apache.geode.distributed.internal.membership.gms.messages.RemoveMemberMessage;
 import 
org.apache.geode.distributed.internal.membership.gms.messages.ViewAckMessage;
 import 
org.apache.geode.distributed.internal.membership.gms.util.MemberIdentifierUtil;
+import org.apache.geode.distributed.internal.tcpserver.HostAndPort;
 import org.apache.geode.distributed.internal.tcpserver.TcpClient;
 import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.test.junit.categories.MembershipTest;
@@ -211,7 +211,7 @@ public class GMSJoinLeaveJUnitTest {
     initMocks(false);
     when(mockConfig.getLocatorWaitTime()).thenReturn(15000);
 
-    when(locatorClient.requestToServer(isA(InetSocketAddress.class),
+    when(locatorClient.requestToServer(isA(HostAndPort.class),
         isA(FindCoordinatorRequest.class), anyInt(), anyBoolean()))
             .thenThrow(new IOException("Connection refused"));
 
@@ -222,7 +222,7 @@ public class GMSJoinLeaveJUnitTest {
         .isInstanceOf(MemberStartupException.class)
         .hasMessageContaining("Interrupted while trying to contact locators");
     assertThat(Thread.currentThread().interrupted()).isTrue();
-    verify(locatorClient, 
times(1)).requestToServer(isA(InetSocketAddress.class),
+    verify(locatorClient, times(1)).requestToServer(isA(HostAndPort.class),
         isA(FindCoordinatorRequest.class), anyInt(), anyBoolean());
   }
 
@@ -429,7 +429,7 @@ public class GMSJoinLeaveJUnitTest {
 
   @Test
   public void multipleLocatorsWithSameAddressAreCanonicalized() throws 
Exception {
-    List<HostAddress> locators = GMSUtil.parseLocators(
+    List<HostAndPort> locators = GMSUtil.parseLocators(
         "localhost[1234],localhost[1234],localhost[1234]", (InetAddress) null);
     assertThat(locators.size()).isEqualTo(1);
   }
@@ -1428,7 +1428,7 @@ public class GMSJoinLeaveJUnitTest {
     FindCoordinatorResponse fcr = new FindCoordinatorResponse(mockMembers[0], 
mockMembers[0], false,
         null, registrants, false, true, null);
 
-    when(locatorClient.requestToServer(isA(InetSocketAddress.class),
+    when(locatorClient.requestToServer(isA(HostAndPort.class),
         isA(FindCoordinatorRequest.class), anyInt(), anyBoolean()))
             .thenReturn(fcr);
 
@@ -1449,7 +1449,7 @@ public class GMSJoinLeaveJUnitTest {
       JoinResponseMessage jrm = new JoinResponseMessage(mockMembers[0], view, 
0);
       gmsJoinLeave.setJoinResponseMessage(jrm);
 
-      when(locatorClient.requestToServer(eq(new InetSocketAddress("localhost", 
12346)),
+      when(locatorClient.requestToServer(eq(new HostAndPort("localhost", 
12346)),
           isA(FindCoordinatorRequest.class), anyInt(), anyBoolean()))
               .thenReturn(fcr);
 
diff --git 
a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSUtil.java
 
b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSUtil.java
index bba8f76..b09cb4e 100644
--- 
a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSUtil.java
+++ 
b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSUtil.java
@@ -28,7 +28,7 @@ import java.util.StringTokenizer;
 
 import org.apache.geode.distributed.internal.membership.api.MemberIdentifier;
 import 
org.apache.geode.distributed.internal.membership.api.MembershipConfigurationException;
-import 
org.apache.geode.distributed.internal.membership.gms.membership.HostAddress;
+import org.apache.geode.distributed.internal.tcpserver.HostAndPort;
 import org.apache.geode.internal.inet.LocalHostUtil;
 import org.apache.geode.internal.serialization.DeserializationContext;
 import org.apache.geode.internal.serialization.SerializationContext;
@@ -46,7 +46,7 @@ public class GMSUtil {
    * @param bindAddress optional address to check for loopback compatibility
    * @return addresses of locators
    */
-  public static List<HostAddress> parseLocators(String locatorsString, String 
bindAddress)
+  public static List<HostAndPort> parseLocators(String locatorsString, String 
bindAddress)
       throws MembershipConfigurationException {
     InetAddress addr = null;
 
@@ -82,12 +82,10 @@ public class GMSUtil {
    * @param locatorsString a DistributionConfig "locators" string
    * @param bindAddress optional address to check for loopback compatibility
    * @return addresses of locators
-   *
-   * @see org.apache.geode.distributed.ConfigurationProperties#LOCATORS for 
format
    */
-  public static List<HostAddress> parseLocators(String locatorsString, 
InetAddress bindAddress)
+  public static List<HostAndPort> parseLocators(String locatorsString, 
InetAddress bindAddress)
       throws MembershipConfigurationException {
-    List<HostAddress> result = new ArrayList<>(2);
+    List<HostAndPort> result = new ArrayList<>(2);
     Set<InetSocketAddress> inetAddresses = new HashSet<>();
     String host;
     final boolean isLoopback = ((bindAddress != null) && 
bindAddress.isLoopbackAddress());
@@ -149,10 +147,10 @@ public class GMSUtil {
         }
       }
 
-      HostAddress la = new HostAddress(isa, host);
+      HostAndPort hostAndPort = new HostAndPort(host, port);
       if (!inetAddresses.contains(isa)) {
         inetAddresses.add(isa);
-        result.add(la);
+        result.add(hostAndPort);
       }
     }
 
diff --git 
a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/MemberDataBuilderImpl.java
 
b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/MemberDataBuilderImpl.java
index b0eca8f..3776175 100644
--- 
a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/MemberDataBuilderImpl.java
+++ 
b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/MemberDataBuilderImpl.java
@@ -76,13 +76,13 @@ public class MemberDataBuilderImpl implements 
MemberDataBuilder {
     this.hostName = hostName;
   }
 
-  private MemberDataBuilderImpl(String fakeHostName) {
+  private MemberDataBuilderImpl(String hostName) {
     try {
       inetAddress = LocalHostUtil.getLocalHost();
     } catch (UnknownHostException e2) {
       throw new RuntimeException("Unable to resolve local host address", e2);
     }
-    hostName = fakeHostName;
+    this.hostName = hostName;
   }
 
   public MemberDataBuilderImpl setMembershipPort(int membershipPort) {
diff --git 
a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/MemberIdentifierImpl.java
 
b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/MemberIdentifierImpl.java
index 2268b5a..d9553f6 100644
--- 
a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/MemberIdentifierImpl.java
+++ 
b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/MemberIdentifierImpl.java
@@ -436,9 +436,9 @@ public class MemberIdentifierImpl implements 
MemberIdentifier, DataSerializableF
     String host;
 
     InetAddress add = getInetAddress();
-    if (add.isMulticastAddress() || useIpAddress)
+    if ((add != null) && (add.isMulticastAddress() || useIpAddress)) {
       host = add.getHostAddress();
-    else {
+    } else {
       String hostName = memberData.getHostName();
       InetAddressValidator inetAddressValidator = 
InetAddressValidator.getInstance();
       boolean isIpAddress = inetAddressValidator.isValid(hostName);
diff --git 
a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/fd/GMSHealthMonitor.java
 
b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/fd/GMSHealthMonitor.java
index 803f4de..98c751a 100644
--- 
a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/fd/GMSHealthMonitor.java
+++ 
b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/fd/GMSHealthMonitor.java
@@ -68,6 +68,7 @@ import 
org.apache.geode.distributed.internal.membership.gms.messages.HeartbeatRe
 import 
org.apache.geode.distributed.internal.membership.gms.messages.SuspectMembersMessage;
 import 
org.apache.geode.distributed.internal.membership.gms.messages.SuspectRequest;
 import org.apache.geode.distributed.internal.tcpserver.ConnectionWatcher;
+import org.apache.geode.distributed.internal.tcpserver.HostAndPort;
 import org.apache.geode.distributed.internal.tcpserver.TcpSocketCreator;
 import org.apache.geode.internal.lang.JavaWorkarounds;
 import org.apache.geode.internal.serialization.Version;
@@ -574,7 +575,7 @@ public class GMSHealthMonitor<ID extends MemberIdentifier> 
implements HealthMoni
             suspectMember.getInetAddress(), port);
         clientSocket =
             socketCreator
-                .connect(suspectMember.getInetAddress(), port, (int) 
memberTimeout,
+                .connect(new HostAndPort(suspectMember.getHostName(), port), 
(int) memberTimeout,
                     new ConnectTimeoutTask(services.getTimer(), 
memberTimeout), false, -1, false);
         clientSocket.setTcpNoDelay(true);
         passed = doTCPCheckMember(suspectMember, clientSocket);
diff --git 
a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocator.java
 
b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocator.java
index eb2939b..adf8660 100644
--- 
a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocator.java
+++ 
b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocator.java
@@ -23,7 +23,6 @@ import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.net.InetAddress;
-import java.net.InetSocketAddress;
 import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -45,8 +44,8 @@ import 
org.apache.geode.distributed.internal.membership.gms.GMSMembershipView;
 import org.apache.geode.distributed.internal.membership.gms.GMSUtil;
 import org.apache.geode.distributed.internal.membership.gms.Services;
 import org.apache.geode.distributed.internal.membership.gms.interfaces.Locator;
-import 
org.apache.geode.distributed.internal.membership.gms.membership.HostAddress;
 import 
org.apache.geode.distributed.internal.membership.gms.messenger.GMSMemberWrapper;
+import org.apache.geode.distributed.internal.tcpserver.HostAndPort;
 import org.apache.geode.distributed.internal.tcpserver.TcpClient;
 import org.apache.geode.distributed.internal.tcpserver.TcpHandler;
 import org.apache.geode.distributed.internal.tcpserver.TcpServer;
@@ -73,7 +72,7 @@ public class GMSLocator<ID extends MemberIdentifier> 
implements Locator<ID>, Tcp
   private final boolean networkPartitionDetectionEnabled;
   private final String securityUDPDHAlgo;
   private final String locatorString;
-  private final List<HostAddress> locators;
+  private final List<HostAndPort> locators;
   private final MembershipLocatorStatistics locatorStats;
   private final Set<ID> registrants = new HashSet<>();
   private final Map<GMSMemberWrapper, byte[]> publicKeys =
@@ -412,8 +411,8 @@ public class GMSLocator<ID extends MemberIdentifier> 
implements Locator<ID>, Tcp
   }
 
   private boolean recoverFromOtherLocators() {
-    for (HostAddress other : locators) {
-      if (recover(other.getSocketInetAddress())) {
+    for (HostAndPort other : locators) {
+      if (recover(other)) {
         logger.info("Peer locator recovered state from {}", other);
         return true;
       }
@@ -421,10 +420,10 @@ public class GMSLocator<ID extends MemberIdentifier> 
implements Locator<ID>, Tcp
     return false;
   }
 
-  private boolean recover(InetSocketAddress other) {
+  private boolean recover(HostAndPort other) {
     try {
       logger.info("Peer locator attempting to recover from {}", other);
-      Object response = locatorClient.requestToServer(other.getAddress(), 
other.getPort(),
+      Object response = locatorClient.requestToServer(other,
           new GetViewRequest(), 20000, true);
       if (response instanceof GetViewResponse) {
         view = ((GetViewResponse<ID>) response).getView();
diff --git 
a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/MembershipLocatorImpl.java
 
b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/MembershipLocatorImpl.java
index 999e6cb..81f3e80 100644
--- 
a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/MembershipLocatorImpl.java
+++ 
b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/MembershipLocatorImpl.java
@@ -37,6 +37,7 @@ import 
org.apache.geode.distributed.internal.membership.api.MembershipLocator;
 import 
org.apache.geode.distributed.internal.membership.api.MembershipLocatorStatistics;
 import org.apache.geode.distributed.internal.membership.gms.GMSMembership;
 import org.apache.geode.distributed.internal.membership.gms.Services;
+import org.apache.geode.distributed.internal.tcpserver.HostAndPort;
 import org.apache.geode.distributed.internal.tcpserver.ProtocolChecker;
 import org.apache.geode.distributed.internal.tcpserver.TcpClient;
 import org.apache.geode.distributed.internal.tcpserver.TcpHandler;
@@ -176,7 +177,8 @@ public class MembershipLocatorImpl<ID extends 
MemberIdentifier> implements Membe
     if (isAlive()) {
       logger.info("Stopping {}", this);
       try {
-        locatorClient.stop(((InetSocketAddress) 
getBindAddress()).getAddress(), getPort());
+        locatorClient
+            .stop(new HostAndPort(((InetSocketAddress) 
getBindAddress()).getHostName(), getPort()));
       } catch (ConnectException ignore) {
         // must not be running
       }
diff --git 
a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeave.java
 
b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeave.java
index 35c8f2c..95b3e3a 100644
--- 
a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeave.java
+++ 
b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeave.java
@@ -20,7 +20,6 @@ import static 
org.apache.geode.internal.serialization.DataSerializableFixedID.LE
 import static 
org.apache.geode.internal.serialization.DataSerializableFixedID.REMOVE_MEMBER_REQUEST;
 
 import java.io.IOException;
-import java.net.InetSocketAddress;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -62,6 +61,7 @@ import 
org.apache.geode.distributed.internal.membership.gms.messages.LeaveReques
 import 
org.apache.geode.distributed.internal.membership.gms.messages.NetworkPartitionMessage;
 import 
org.apache.geode.distributed.internal.membership.gms.messages.RemoveMemberMessage;
 import 
org.apache.geode.distributed.internal.membership.gms.messages.ViewAckMessage;
+import org.apache.geode.distributed.internal.tcpserver.HostAndPort;
 import org.apache.geode.distributed.internal.tcpserver.TcpClient;
 import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.executors.LoggingExecutors;
@@ -179,7 +179,7 @@ public class GMSJoinLeave<ID extends MemberIdentifier> 
implements JoinLeave<ID>
    */
   private GMSMembershipView<ID> lastConflictingView;
 
-  private List<HostAddress> locators;
+  private List<HostAndPort> locators;
 
   /**
    * a list of join/leave/crashes
@@ -1140,10 +1140,9 @@ public class GMSJoinLeave<ID extends MemberIdentifier> 
implements JoinLeave<ID>
     state.locatorsContacted = 0;
 
     do {
-      for (HostAddress laddr : locators) {
+      for (HostAndPort laddr : locators) {
         try {
-          InetSocketAddress addr = laddr.getSocketInetAddress();
-          Object o = locatorClient.requestToServer(addr, request, 
connectTimeout, true);
+          Object o = locatorClient.requestToServer(laddr, request, 
connectTimeout, true);
           FindCoordinatorResponse<ID> response =
               (o instanceof FindCoordinatorResponse) ? 
(FindCoordinatorResponse<ID>) o : null;
           if (response != null) {
diff --git 
a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/membership/HostAddress.java
 
b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/membership/HostAddress.java
deleted file mode 100644
index 3edde3b..0000000
--- 
a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/membership/HostAddress.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license
- * agreements. See the NOTICE file distributed with this work for additional 
information regarding
- * copyright ownership. The ASF licenses this file to You under the Apache 
License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the 
License. You may obtain a
- * copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software 
distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
KIND, either express
- * or implied. See the License for the specific language governing permissions 
and limitations under
- * the License.
- */
-package org.apache.geode.distributed.internal.membership.gms.membership;
-
-import java.net.InetSocketAddress;
-
-import org.apache.geode.distributed.internal.tcpserver.LocatorAddress;
-
-public class HostAddress extends LocatorAddress {
-
-  public HostAddress(InetSocketAddress loc, String locStr) {
-    super(loc, locStr);
-  }
-
-}
diff --git 
a/geode-protobuf/src/integrationTest/java/org/apache/geode/internal/protocol/protobuf/v1/acceptance/CacheConnectionIntegrationTest.java
 
b/geode-protobuf/src/integrationTest/java/org/apache/geode/internal/protocol/protobuf/v1/acceptance/CacheConnectionIntegrationTest.java
index 2a2d2b5..a8d7d7a 100644
--- 
a/geode-protobuf/src/integrationTest/java/org/apache/geode/internal/protocol/protobuf/v1/acceptance/CacheConnectionIntegrationTest.java
+++ 
b/geode-protobuf/src/integrationTest/java/org/apache/geode/internal/protocol/protobuf/v1/acceptance/CacheConnectionIntegrationTest.java
@@ -60,6 +60,7 @@ import org.apache.geode.cache.RegionFactory;
 import org.apache.geode.cache.server.CacheServer;
 import org.apache.geode.distributed.ConfigurationProperties;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
+import org.apache.geode.distributed.internal.tcpserver.HostAndPort;
 import org.apache.geode.internal.AvailablePortHelper;
 import org.apache.geode.internal.admin.SSLConfig;
 import org.apache.geode.internal.cache.InternalCacheServer;
@@ -272,6 +273,6 @@ public class CacheConnectionIntegrationTest {
     sslConfigBuilder.setEndpointIdentificationEnabled(false);
 
     SocketCreator socketCreator = new SocketCreator(sslConfigBuilder.build());
-    return socketCreator.connectForClient("localhost", cacheServerPort, 5000);
+    return socketCreator.connectForClient(new HostAndPort("localhost", 
cacheServerPort), 5000);
   }
 }
diff --git 
a/geode-protobuf/src/integrationTest/java/org/apache/geode/internal/protocol/protobuf/v1/acceptance/CacheOperationsJUnitTest.java
 
b/geode-protobuf/src/integrationTest/java/org/apache/geode/internal/protocol/protobuf/v1/acceptance/CacheOperationsJUnitTest.java
index b40cabd..5572ced 100644
--- 
a/geode-protobuf/src/integrationTest/java/org/apache/geode/internal/protocol/protobuf/v1/acceptance/CacheOperationsJUnitTest.java
+++ 
b/geode-protobuf/src/integrationTest/java/org/apache/geode/internal/protocol/protobuf/v1/acceptance/CacheOperationsJUnitTest.java
@@ -53,6 +53,7 @@ import org.apache.geode.cache.CacheFactory;
 import org.apache.geode.cache.RegionFactory;
 import org.apache.geode.cache.server.CacheServer;
 import org.apache.geode.distributed.ConfigurationProperties;
+import org.apache.geode.distributed.internal.tcpserver.HostAndPort;
 import org.apache.geode.internal.AvailablePortHelper;
 import org.apache.geode.internal.admin.SSLConfig;
 import org.apache.geode.internal.net.SocketCreator;
@@ -401,6 +402,6 @@ public class CacheOperationsJUnitTest {
     sslConfigBuilder.setKeystorePassword("password");
 
     SocketCreator socketCreator = new SocketCreator(sslConfigBuilder.build());
-    return socketCreator.connectForClient("localhost", cacheServerPort, 5000);
+    return socketCreator.connectForClient(new HostAndPort("localhost", 
cacheServerPort), 5000);
   }
 }
diff --git 
a/geode-serialization/src/main/java/org/apache/geode/internal/serialization/StaticSerialization.java
 
b/geode-serialization/src/main/java/org/apache/geode/internal/serialization/StaticSerialization.java
index aa4e46a..09f62a8 100644
--- 
a/geode-serialization/src/main/java/org/apache/geode/internal/serialization/StaticSerialization.java
+++ 
b/geode-serialization/src/main/java/org/apache/geode/internal/serialization/StaticSerialization.java
@@ -266,6 +266,7 @@ public class StaticSerialization {
     }
 
     try {
+      // note: this does not throw UnknownHostException at this time
       InetAddress addr = InetAddress.getByAddress(address);
       return addr;
     } catch (UnknownHostException ex) {
diff --git 
a/geode-tcp-server/src/distributedTest/java/org/apache/geode/distributed/internal/tcpserver/TcpServerGossipVersionDUnitTest.java
 
b/geode-tcp-server/src/distributedTest/java/org/apache/geode/distributed/internal/tcpserver/TcpServerGossipVersionDUnitTest.java
index b283358..f321a9a 100644
--- 
a/geode-tcp-server/src/distributedTest/java/org/apache/geode/distributed/internal/tcpserver/TcpServerGossipVersionDUnitTest.java
+++ 
b/geode-tcp-server/src/distributedTest/java/org/apache/geode/distributed/internal/tcpserver/TcpServerGossipVersionDUnitTest.java
@@ -149,7 +149,8 @@ public class TcpServerGossipVersionDUnitTest extends 
JUnit4DistributedTestCase {
           .getSocketCreatorForComponent(SecurableCommunicationChannel.LOCATOR),
           InternalDataSerializer.getDSFIDSerializer().getObjectSerializer(),
           InternalDataSerializer.getDSFIDSerializer().getObjectDeserializer())
-              .requestToServer(LocalHostUtil.getLocalHost(), port0, req, 5000);
+              .requestToServer(new 
HostAndPort(LocalHostUtil.getLocalHost().getHostName(), port0),
+                  req, 5000);
       assertThat(response).isNotNull();
 
     } catch (IllegalStateException e) {
diff --git 
a/geode-tcp-server/src/distributedTest/java/org/apache/geode/distributed/internal/tcpserver/TcpServerJUnitTest.java
 
b/geode-tcp-server/src/distributedTest/java/org/apache/geode/distributed/internal/tcpserver/TcpServerJUnitTest.java
index a0947e5..ea77525 100644
--- 
a/geode-tcp-server/src/distributedTest/java/org/apache/geode/distributed/internal/tcpserver/TcpServerJUnitTest.java
+++ 
b/geode-tcp-server/src/distributedTest/java/org/apache/geode/distributed/internal/tcpserver/TcpServerJUnitTest.java
@@ -133,10 +133,11 @@ public class TcpServerJUnitTest {
 
     InfoRequest testInfoRequest = new InfoRequest();
     InfoResponse testInfoResponse =
-        (InfoResponse) tcpClient.requestToServer(localhost, port, 
testInfoRequest, TIMEOUT);
+        (InfoResponse) tcpClient.requestToServer(new 
HostAndPort(localhost.getHostAddress(), port),
+            testInfoRequest, TIMEOUT);
     assertThat(testInfoResponse.getInfo()[0]).contains("geode-tcp-server");
 
-    String[] requestedInfo = tcpClient.getInfo(localhost, port);
+    String[] requestedInfo = tcpClient.getInfo(new 
HostAndPort(localhost.getHostAddress(), port));
     assertNotNull(requestedInfo);
     assertTrue(requestedInfo.length > 1);
 
@@ -167,7 +168,8 @@ public class TcpServerJUnitTest {
       public void run() {
         Boolean delay = Boolean.valueOf(true);
         try {
-          tcpClient.requestToServer(localhost, port, delay, TIMEOUT);
+          tcpClient.requestToServer(new 
HostAndPort(localhost.getHostAddress(), port), delay,
+              TIMEOUT);
         } catch (IOException e) {
           e.printStackTrace();
         } catch (ClassNotFoundException e) {
@@ -180,7 +182,8 @@ public class TcpServerJUnitTest {
     try {
       Thread.sleep(500);
       assertFalse(done.get());
-      tcpClient.requestToServer(localhost, port, Boolean.valueOf(false), 
TIMEOUT);
+      tcpClient.requestToServer(new HostAndPort(localhost.getHostAddress(), 
port),
+          Boolean.valueOf(false), TIMEOUT);
       assertFalse(done.get());
 
       latch.countDown();
@@ -206,8 +209,9 @@ public class TcpServerJUnitTest {
 
     // Due to the mocked handler, an EOFException will be thrown on the 
client. This is expected.
     assertThatThrownBy(
-        () -> tcpClient.requestToServer(localhost, port, new TestObject(), 
TIMEOUT))
-            .isInstanceOf(EOFException.class);
+        () -> tcpClient.requestToServer(new 
HostAndPort(localhost.getHostAddress(), port),
+            new TestObject(), TIMEOUT))
+                .isInstanceOf(EOFException.class);
 
     // Change the mock handler behavior to echo the request back
     doAnswer(new Answer() {
@@ -221,7 +225,8 @@ public class TcpServerJUnitTest {
     TestObject test = new TestObject();
     test.id = 5;
     TestObject result =
-        (TestObject) tcpClient.requestToServer(localhost, port, test, TIMEOUT);
+        (TestObject) tcpClient.requestToServer(new 
HostAndPort(localhost.getHostAddress(), port),
+            test, TIMEOUT);
 
     assertEquals(test.id, result.id);
 
@@ -233,7 +238,7 @@ public class TcpServerJUnitTest {
 
   private void stopServer(final TcpClient tcpClient) throws 
InterruptedException {
     try {
-      tcpClient.stop(localhost, port);
+      tcpClient.stop(new HostAndPort(localhost.getHostAddress(), port));
     } catch (ConnectException ignore) {
       // must not be running
     }
diff --git 
a/geode-tcp-server/src/distributedTest/java/org/apache/geode/distributed/internal/tcpserver/TcpServerProductVersionDUnitTest.java
 
b/geode-tcp-server/src/distributedTest/java/org/apache/geode/distributed/internal/tcpserver/TcpServerProductVersionDUnitTest.java
index e98cbf8..bc22674 100644
--- 
a/geode-tcp-server/src/distributedTest/java/org/apache/geode/distributed/internal/tcpserver/TcpServerProductVersionDUnitTest.java
+++ 
b/geode-tcp-server/src/distributedTest/java/org/apache/geode/distributed/internal/tcpserver/TcpServerProductVersionDUnitTest.java
@@ -169,7 +169,9 @@ public class TcpServerProductVersionDUnitTest implements 
Serializable {
       }
 
       final Object response = tcpClient
-          .requestToServer(SocketCreator.getLocalHost(), locatorPort, 
requestMessage, 1000);
+          .requestToServer(
+              new HostAndPort(SocketCreator.getLocalHost().getHostAddress(), 
locatorPort),
+              requestMessage, 1000);
 
       final Class<?> responseClass = Class.forName(responseClassName);
 
diff --git 
a/geode-tcp-server/src/main/java/org/apache/geode/distributed/internal/tcpserver/LocatorAddress.java
 
b/geode-tcp-server/src/main/java/org/apache/geode/distributed/internal/tcpserver/HostAndPort.java
similarity index 81%
rename from 
geode-tcp-server/src/main/java/org/apache/geode/distributed/internal/tcpserver/LocatorAddress.java
rename to 
geode-tcp-server/src/main/java/org/apache/geode/distributed/internal/tcpserver/HostAndPort.java
index 0097b50..064e27b 100644
--- 
a/geode-tcp-server/src/main/java/org/apache/geode/distributed/internal/tcpserver/LocatorAddress.java
+++ 
b/geode-tcp-server/src/main/java/org/apache/geode/distributed/internal/tcpserver/HostAndPort.java
@@ -14,32 +14,27 @@
  */
 package org.apache.geode.distributed.internal.tcpserver;
 
+import java.net.InetAddress;
 import java.net.InetSocketAddress;
 import java.util.Objects;
 
 import org.apache.commons.validator.routines.InetAddressValidator;
 
-public class LocatorAddress {
+public class HostAndPort {
 
   private final InetSocketAddress socketInetAddress;
 
-  public LocatorAddress(InetSocketAddress loc, String locStr) {
-    if (InetAddressValidator.getInstance().isValid(locStr)) {
-      socketInetAddress = new InetSocketAddress(locStr, loc.getPort());
+  public HostAndPort(String hostName, int port) {
+    if (InetAddressValidator.getInstance().isValid(hostName)) {
+      // numeric address - use as-is
+      socketInetAddress = new InetSocketAddress(hostName, port);
     } else {
-      socketInetAddress = cloneUnresolved(loc);
+      // non-numeric address - resolve hostname when needed
+      socketInetAddress = InetSocketAddress.createUnresolved(hostName, port);
     }
   }
 
   /**
-   * @deprecated Users should not care if literal IP or hostname is used.
-   */
-  @Deprecated
-  public boolean isIpString() {
-    return !socketInetAddress.isUnresolved();
-  }
-
-  /**
    * If location is not litteral IP address a new resolved {@link 
InetSocketAddress} is returned.
    *
    * @return resolved {@link InetSocketAddress}, otherwise stored {@link 
InetSocketAddress} if
@@ -74,7 +69,7 @@ public class LocatorAddress {
     if (o == null || getClass() != o.getClass()) {
       return false;
     }
-    LocatorAddress that = (LocatorAddress) o;
+    HostAndPort that = (HostAndPort) o;
     return Objects.equals(socketInetAddress, that.socketInetAddress);
   }
 
@@ -88,4 +83,7 @@ public class LocatorAddress {
         inetSocketAddress.getPort());
   }
 
+  public InetAddress getAddress() {
+    return getSocketInetAddress().getAddress();
+  }
 }
diff --git 
a/geode-tcp-server/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpClient.java
 
b/geode-tcp-server/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpClient.java
index fcae472..52ec8c3 100644
--- 
a/geode-tcp-server/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpClient.java
+++ 
b/geode-tcp-server/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpClient.java
@@ -21,8 +21,6 @@ import java.io.EOFException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
 import java.net.Socket;
 import java.util.HashMap;
 import java.util.Map;
@@ -54,7 +52,7 @@ public class TcpClient {
   private static final int DEFAULT_REQUEST_TIMEOUT = 60 * 2 * 1000;
 
   @MakeNotStatic
-  private static final Map<InetSocketAddress, Short> serverVersions =
+  private static final Map<HostAndPort, Short> serverVersions =
       new HashMap<>();
 
   private final TcpSocketCreator socketCreator;
@@ -76,17 +74,17 @@ public class TcpClient {
   /**
    * Stops the Locator running on a given host and port
    */
-  public void stop(InetAddress addr, int port) throws 
java.net.ConnectException {
+  public void stop(HostAndPort addr) throws java.net.ConnectException {
     try {
       ShutdownRequest request = new ShutdownRequest();
-      requestToServer(addr, port, request, DEFAULT_REQUEST_TIMEOUT);
+      requestToServer(addr, request, DEFAULT_REQUEST_TIMEOUT);
     } catch (java.net.ConnectException ce) {
       // must not be running, rethrow so the caller can handle.
       // In most cases this Exception should be ignored.
       throw ce;
     } catch (Exception ex) {
       logger.error(
-          "TcpClient.stop(): exception connecting to locator " + addr + ":" + 
port + ": " + ex);
+          "TcpClient.stop(): exception connecting to locator " + addr + ex);
     }
   }
 
@@ -95,17 +93,17 @@ public class TcpClient {
    * <code>String</code>s are returned: the first string is the working 
directory of the locator
    * and the second string is the product directory of the locator.
    */
-  public String[] getInfo(InetAddress addr, int port) {
+  public String[] getInfo(HostAndPort addr) {
     try {
       InfoRequest request = new InfoRequest();
       InfoResponse response =
-          (InfoResponse) requestToServer(addr, port, request, 
DEFAULT_REQUEST_TIMEOUT);
+          (InfoResponse) requestToServer(addr, request, 
DEFAULT_REQUEST_TIMEOUT);
       return response.getInfo();
     } catch (java.net.ConnectException ignore) {
       return null;
     } catch (Exception ex) {
       logger.error(
-          "TcpClient.getInfo(): exception connecting to locator " + addr + ":" 
+ port + ": " + ex);
+          "TcpClient.getInfo(): exception connecting to locator " + addr + ": 
" + ex);
       return null;
     }
 
@@ -115,53 +113,31 @@ public class TcpClient {
    * Send a request to a Locator and expect a reply
    *
    * @param addr The locator's address
-   * @param port The locator's tcp/ip port
    * @param request The request message
    * @param timeout Timeout for sending the message and receiving a reply
    * @return the reply
    */
-  public Object requestToServer(InetAddress addr, int port, Object request, 
int timeout)
+  public Object requestToServer(HostAndPort addr, Object request, int timeout)
       throws IOException, ClassNotFoundException {
 
-    return requestToServer(addr, port, request, timeout, true);
+    return requestToServer(addr, request, timeout, true);
   }
 
   /**
    * Send a request to a Locator
    *
    * @param addr The locator's address
-   * @param port The locator's tcp/ip port
-   * @param request The request message
-   * @param timeout Timeout for sending the message and receiving a reply
-   * @param replyExpected Whether to wait for a reply
-   * @return the reply
-   */
-  public Object requestToServer(InetAddress addr, int port, Object request, 
int timeout,
-      boolean replyExpected) throws IOException, ClassNotFoundException {
-    InetSocketAddress ipAddr;
-    if (addr == null) {
-      ipAddr = new InetSocketAddress(port);
-    } else {
-      ipAddr = new InetSocketAddress(addr, port); // fix for bug 30810
-    }
-    return requestToServer(ipAddr, request, timeout, replyExpected);
-  }
-
-  /**
-   * Send a request to a Locator
-   *
-   * @param ipAddr The locator's inet socket address
    * @param request The request message
    * @param timeout Timeout for sending the message and receiving a reply
    * @param replyExpected Whether to wait for a reply
    * @return The reply, or null if no reply is expected
    */
-  public Object requestToServer(InetSocketAddress ipAddr, Object request, int 
timeout,
+  public Object requestToServer(HostAndPort addr, Object request, int timeout,
       boolean replyExpected) throws IOException, ClassNotFoundException {
     long giveupTime = System.currentTimeMillis() + timeout;
 
     // Get the GemFire version of the TcpServer first, before sending any 
other request.
-    short serverVersion = getServerVersion(ipAddr, timeout);
+    short serverVersion = getServerVersion(addr, timeout);
 
     if (serverVersion > Version.CURRENT_ORDINAL) {
       serverVersion = Version.CURRENT_ORDINAL;
@@ -179,10 +155,10 @@ public class TcpClient {
       return null;
     }
 
-    logger.debug("TcpClient sending {} to {}", request, ipAddr);
+    logger.debug("TcpClient sending {} to {}", request, addr);
 
     Socket sock =
-        socketCreator.connect(ipAddr.getAddress(), ipAddr.getPort(), (int) 
newTimeout, null, false);
+        socketCreator.connect(addr, (int) newTimeout, null, false);
     sock.setSoTimeout((int) newTimeout);
     DataOutputStream out = null;
     try {
@@ -210,7 +186,7 @@ public class TcpClient {
           return response;
         } catch (EOFException ex) {
           logger.debug("requestToServer EOFException ", ex);
-          EOFException eof = new EOFException("Locator at " + ipAddr
+          EOFException eof = new EOFException("Locator at " + addr
               + " did not respond. This is normal if the locator was shutdown. 
If it wasn't check its log for exceptions.");
           eof.initCause(ex);
           throw eof;
@@ -246,7 +222,7 @@ public class TcpClient {
     }
   }
 
-  private Short getServerVersion(InetSocketAddress ipAddr, int timeout)
+  private Short getServerVersion(HostAndPort addr, int timeout)
       throws IOException, ClassNotFoundException {
 
     int gossipVersion;
@@ -255,7 +231,7 @@ public class TcpClient {
 
     // Get GemFire version of TcpServer first, before sending any other 
request.
     synchronized (serverVersions) {
-      serverVersion = serverVersions.get(ipAddr);
+      serverVersion = serverVersions.get(addr);
     }
 
     if (serverVersion != null) {
@@ -265,7 +241,7 @@ public class TcpClient {
     gossipVersion = TcpServer.getOldGossipVersion();
 
     try {
-      sock = socketCreator.connect(ipAddr.getAddress(), ipAddr.getPort(), 
timeout, null, false);
+      sock = socketCreator.connect(addr, timeout, null, false);
       sock.setSoTimeout(timeout);
     } catch (SSLException e) {
       throw new IllegalStateException("Unable to form SSL connection", e);
@@ -296,7 +272,7 @@ public class TcpClient {
         VersionResponse response = (VersionResponse) readObject;
         serverVersion = response.getVersionOrdinal();
         synchronized (serverVersions) {
-          serverVersions.put(ipAddr, serverVersion);
+          serverVersions.put(addr, serverVersion);
         }
 
         return serverVersion;
@@ -318,7 +294,7 @@ public class TcpClient {
 
     }
     synchronized (serverVersions) {
-      serverVersions.put(ipAddr, Version.GFE_57.ordinal());
+      serverVersions.put(addr, Version.GFE_57.ordinal());
     }
     return Short.valueOf(Version.GFE_57.ordinal());
   }
diff --git 
a/geode-tcp-server/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpSocketCreator.java
 
b/geode-tcp-server/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpSocketCreator.java
index 11b7876..1dbd44c 100644
--- 
a/geode-tcp-server/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpSocketCreator.java
+++ 
b/geode-tcp-server/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpSocketCreator.java
@@ -36,10 +36,10 @@ public interface TcpSocketCreator {
       boolean isBindAddress, boolean useNIO, int tcpBufferSize, int[] 
tcpPortRange,
       boolean sslConnection) throws IOException;
 
-  Socket connect(InetAddress inetadd, int port, int timeout,
+  Socket connect(HostAndPort addr, int timeout,
       ConnectionWatcher optionalWatcher, boolean clientSide) throws 
IOException;
 
-  Socket connect(InetAddress inetadd, int port, int timeout,
+  Socket connect(HostAndPort addr, int timeout,
       ConnectionWatcher optionalWatcher, boolean clientSide, int 
socketBufferSize,
       boolean sslConnection) throws IOException;
 
diff --git 
a/geode-tcp-server/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpSocketCreatorImpl.java
 
b/geode-tcp-server/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpSocketCreatorImpl.java
index 8dc4d9e..437526c 100644
--- 
a/geode-tcp-server/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpSocketCreatorImpl.java
+++ 
b/geode-tcp-server/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpSocketCreatorImpl.java
@@ -159,14 +159,14 @@ public class TcpSocketCreatorImpl implements 
TcpSocketCreator {
 
 
   @Override
-  public final Socket connect(InetAddress inetadd, int port, int timeout,
+  public final Socket connect(HostAndPort addr, int timeout,
       ConnectionWatcher optionalWatcher, boolean clientSide)
       throws IOException {
-    return connect(inetadd, port, timeout, optionalWatcher, clientSide, -1, 
useSSL());
+    return connect(addr, timeout, optionalWatcher, clientSide, -1, useSSL());
   }
 
   @Override
-  public Socket connect(InetAddress inetadd, int port, int timeout,
+  public Socket connect(HostAndPort addr, int timeout,
       ConnectionWatcher optionalWatcher, boolean clientSide,
       int socketBufferSize, boolean sslConnection) throws IOException {
     if (sslConnection) {
@@ -174,7 +174,7 @@ public class TcpSocketCreatorImpl implements 
TcpSocketCreator {
     }
     Socket socket = null;
     if (clientSide) {
-      socket = createCustomClientSocket(inetadd, port);
+      socket = createCustomClientSocket(addr);
     }
     if (socket == null) {
       socket = new Socket();
@@ -188,8 +188,11 @@ public class TcpSocketCreatorImpl implements 
TcpSocketCreator {
       if (optionalWatcher != null) {
         optionalWatcher.beforeConnect(socket);
       }
+      InetSocketAddress inetSocketAddress = addr.getSocketInetAddress();
       try {
-        socket.connect(new InetSocketAddress(inetadd, port), Math.max(timeout, 
0));
+        socket.connect(
+            new InetSocketAddress(inetSocketAddress.getAddress(), 
inetSocketAddress.getPort()),
+            Math.max(timeout, 0));
       } finally {
         if (optionalWatcher != null) {
           optionalWatcher.afterConnect(socket);
@@ -205,7 +208,7 @@ public class TcpSocketCreatorImpl implements 
TcpSocketCreator {
    *
    * @return the socket, or null if no custom client socket factory is 
available
    */
-  protected Socket createCustomClientSocket(InetAddress inetaddr, int port) 
throws IOException {
+  protected Socket createCustomClientSocket(HostAndPort addr) throws 
IOException {
     throw new UnsupportedOperationException(
         "custom client socket factory is not supported by this socket 
creator");
   }
diff --git 
a/geode-tcp-server/src/test/java/org/apache/geode/distributed/internal/tcpserver/LocatorAddressTest.java
 
b/geode-tcp-server/src/test/java/org/apache/geode/distributed/internal/tcpserver/HostAndPortTest.java
similarity index 56%
rename from 
geode-tcp-server/src/test/java/org/apache/geode/distributed/internal/tcpserver/LocatorAddressTest.java
rename to 
geode-tcp-server/src/test/java/org/apache/geode/distributed/internal/tcpserver/HostAndPortTest.java
index ad2ed0e..1381721 100644
--- 
a/geode-tcp-server/src/test/java/org/apache/geode/distributed/internal/tcpserver/LocatorAddressTest.java
+++ 
b/geode-tcp-server/src/test/java/org/apache/geode/distributed/internal/tcpserver/HostAndPortTest.java
@@ -20,15 +20,14 @@ import java.net.InetSocketAddress;
 
 import org.junit.Test;
 
-public class LocatorAddressTest {
+public class HostAndPortTest {
 
   /**
    * Test that getSocketInentAddress returns resolved InetSocketAddress
    */
   @Test
   public void Test_getSocketInentAddress_returns_resolved_SocketAddress() {
-    InetSocketAddress host1address = new InetSocketAddress(8080);
-    LocatorAddress locator1 = new LocatorAddress(host1address, "localhost");
+    HostAndPort locator1 = new HostAndPort("localhost", 8080);
 
     InetSocketAddress actual = locator1.getSocketInetAddress();
 
@@ -40,8 +39,7 @@ public class LocatorAddressTest {
    */
   @Test
   public void Test_getSocketInentAddress_returns_unresolved_SocketAddress() {
-    InetSocketAddress host1address = 
InetSocketAddress.createUnresolved("fakelocalhost", 8090);
-    LocatorAddress locator1 = new LocatorAddress(host1address, 
"fakelocalhost");
+    HostAndPort locator1 = new HostAndPort("fakelocalhost", 8090);
 
     InetSocketAddress actual = locator1.getSocketInetAddress();
 
@@ -49,61 +47,43 @@ public class LocatorAddressTest {
   }
 
   /**
-   * Test whether LocatorAddress are equal, when created from resolved and 
unresolved
+   * Test whether HostAndPort are equal, when created from resolved and 
unresolved
    * InetSocketAddress
    */
   @Test
   public void 
Test_equals_LocatorAddress_from_resolved_and_unresolved_SocketAddress() {
-    InetSocketAddress host1address = 
InetSocketAddress.createUnresolved("localhost", 8090);
-    LocatorAddress locator1 = new LocatorAddress(host1address, "localhost");
+    HostAndPort locator1 = new HostAndPort("localhost", 8080);
 
     InetSocketAddress host2address = locator1.getSocketInetAddress();
-    LocatorAddress locator2 = new LocatorAddress(host2address, "localhost");
+    HostAndPort locator2 = new HostAndPort("localhost", 
host2address.getPort());
 
-    assertThat(host1address.isUnresolved()).isTrue();
     assertThat(host2address.isUnresolved()).isFalse();
     assertThat(locator1.equals(locator2)).isTrue();
   }
 
   @Test
   public void Test_getPort_returns_port() {
-    InetSocketAddress host1address = 
InetSocketAddress.createUnresolved("localhost", 8090);
-    LocatorAddress locator1 = new LocatorAddress(host1address, "localhost");
+    HostAndPort locator1 = new HostAndPort("localhost", 8090);
     assertThat(locator1.getPort()).isEqualTo(8090);
   }
 
   @Test
   public void Test_getHostName_returns_hostname() {
-    InetSocketAddress host1address = 
InetSocketAddress.createUnresolved("fakelocalhost", 8091);
-    LocatorAddress locator1 = new LocatorAddress(host1address, 
"fakelocalhost");
+    HostAndPort locator1 = new HostAndPort("fakelocalhost", 8091);
     assertThat(locator1.getHostName()).isEqualTo("fakelocalhost");
   }
 
   @Test
   public void Test_hashCode_of_SocketAddress() {
     InetSocketAddress host1address = 
InetSocketAddress.createUnresolved("fakelocalhost", 8091);
-    LocatorAddress locator1 = new LocatorAddress(host1address, 
"fakelocalhost");
+    HostAndPort locator1 = new HostAndPort("fakelocalhost", 8091);
     assertThat(locator1.hashCode()).isEqualTo(host1address.hashCode());
   }
 
   @Test
   public void Test_toString_LocatorAddress() {
-    InetSocketAddress host1address = 
InetSocketAddress.createUnresolved("fakelocalhost", 8091);
-    LocatorAddress locator1 = new LocatorAddress(host1address, 
"fakelocalhost");
+    HostAndPort locator1 = new HostAndPort("fakelocalhost", 8091);
     assertThat(locator1.toString()).contains("socketInetAddress");
   }
 
-  @Test
-  public void Test_isIpString_for_LocatorAddress_constructed_from_IPstring() {
-    InetSocketAddress host1address = new InetSocketAddress(8080);
-    LocatorAddress locator1 = new LocatorAddress(host1address, "127.0.0.1");
-    assertThat(locator1.isIpString()).isTrue();
-  }
-
-  @Test
-  public void Test_isIpString_for_LocatorAddress_constructed_from_hostname() {
-    InetSocketAddress host1address = new InetSocketAddress(8080);
-    LocatorAddress locator1 = new LocatorAddress(host1address, "localhost");
-    assertThat(locator1.isIpString()).isFalse();
-  }
 }
diff --git 
a/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/LocatorDiscovery.java
 
b/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/LocatorDiscovery.java
index ce1c7e2..62b2fab 100644
--- 
a/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/LocatorDiscovery.java
+++ 
b/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/LocatorDiscovery.java
@@ -21,6 +21,7 @@ import java.util.concurrent.ConcurrentHashMap;
 import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.distributed.internal.WanLocatorDiscoverer;
+import org.apache.geode.distributed.internal.tcpserver.HostAndPort;
 import org.apache.geode.distributed.internal.tcpserver.TcpClient;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.admin.remote.DistributionLocatorId;
@@ -138,8 +139,8 @@ public class LocatorDiscovery {
     while (!getDiscoverer().isStopped()) {
       try {
         RemoteLocatorJoinResponse response =
-            (RemoteLocatorJoinResponse) 
locatorClient.requestToServer(locatorId.getHost(), request,
-                WanLocatorDiscoverer.WAN_LOCATOR_CONNECTION_TIMEOUT, true);
+            (RemoteLocatorJoinResponse) 
locatorClient.requestToServer(locatorId.getHost(),
+                request, WanLocatorDiscoverer.WAN_LOCATOR_CONNECTION_TIMEOUT, 
true);
         if (response != null) {
           LocatorHelper.addExchangedLocators(response.getLocators(), 
this.locatorListener);
           logger.info("Locator discovery task exchanged locator information {} 
with {}: {}.",
@@ -185,7 +186,8 @@ public class LocatorDiscovery {
       RemoteLocatorJoinResponse response;
       try {
         response =
-            (RemoteLocatorJoinResponse) 
locatorClient.requestToServer(remoteLocator.getHost(),
+            (RemoteLocatorJoinResponse) locatorClient.requestToServer(
+                remoteLocator.getHost(),
                 request, WanLocatorDiscoverer.WAN_LOCATOR_CONNECTION_TIMEOUT, 
true);
         if (response != null) {
           LocatorHelper.addExchangedLocators(response.getLocators(), 
this.locatorListener);
@@ -195,7 +197,8 @@ public class LocatorDiscovery {
           while (true) {
             Thread.sleep(WAN_LOCATOR_PING_INTERVAL);
             RemoteLocatorPingResponse pingResponse =
-                (RemoteLocatorPingResponse) 
locatorClient.requestToServer(remoteLocator.getHost(),
+                (RemoteLocatorPingResponse) locatorClient.requestToServer(
+                    new HostAndPort(remoteLocator.getHostName(), 
remoteLocator.getPort()),
                     pingRequest, 
WanLocatorDiscoverer.WAN_LOCATOR_CONNECTION_TIMEOUT, true);
             if (pingResponse != null) {
               continue;
diff --git 
a/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/LocatorMembershipListenerImpl.java
 
b/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/LocatorMembershipListenerImpl.java
index 31315ed..112feb6 100644
--- 
a/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/LocatorMembershipListenerImpl.java
+++ 
b/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/LocatorMembershipListenerImpl.java
@@ -244,7 +244,8 @@ public class LocatorMembershipListenerImpl implements 
LocatorMembershipListener
       DistributionLocatorId advertisedLocator = 
locatorJoinMessage.getLocator();
 
       try {
-        tcpClient.requestToServer(targetLocator.getHost(), locatorJoinMessage, 
memberTimeout,
+        tcpClient.requestToServer(targetLocator.getHost(),
+            locatorJoinMessage, memberTimeout,
             false);
       } catch (Exception exception) {
         if (logger.isDebugEnabled()) {
@@ -266,7 +267,8 @@ public class LocatorMembershipListenerImpl implements 
LocatorMembershipListener
       DistributionLocatorId advertisedLocator = 
locatorJoinMessage.getLocator();
 
       try {
-        tcpClient.requestToServer(targetLocator.getHost(), locatorJoinMessage, 
memberTimeout,
+        tcpClient.requestToServer(targetLocator.getHost(),
+            locatorJoinMessage, memberTimeout,
             false);
 
         return true;
diff --git 
a/geode-wan/src/test/java/org/apache/geode/cache/client/internal/locator/wan/LocatorMembershipListenerTest.java
 
b/geode-wan/src/test/java/org/apache/geode/cache/client/internal/locator/wan/LocatorMembershipListenerTest.java
index f3770a6..d282128 100644
--- 
a/geode-wan/src/test/java/org/apache/geode/cache/client/internal/locator/wan/LocatorMembershipListenerTest.java
+++ 
b/geode-wan/src/test/java/org/apache/geode/cache/client/internal/locator/wan/LocatorMembershipListenerTest.java
@@ -30,7 +30,6 @@ import static org.mockito.Mockito.when;
 
 import java.io.EOFException;
 import java.io.IOException;
-import java.net.InetSocketAddress;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -50,6 +49,7 @@ import org.junit.Before;
 import org.junit.Test;
 
 import org.apache.geode.distributed.internal.DistributionConfig;
+import org.apache.geode.distributed.internal.tcpserver.HostAndPort;
 import org.apache.geode.distributed.internal.tcpserver.TcpClient;
 import org.apache.geode.internal.admin.remote.DistributionLocatorId;
 import org.apache.geode.test.junit.ResultCaptor;
@@ -211,7 +211,7 @@ public class LocatorMembershipListenerTest {
         any(DistributionLocatorId.class), anyMap(), 
any(DistributionLocatorId.class), anyInt());
     locatorMembershipListener.locatorJoined(2, joiningLocator, locator1Site1);
     joinLocatorsDistributorThread(resultCaptor);
-    verify(tcpClient, times(0)).requestToServer(any(InetSocketAddress.class),
+    verify(tcpClient, times(0)).requestToServer(any(HostAndPort.class),
         any(LocatorJoinMessage.class), anyInt(), anyBoolean());
   }
 
diff --git 
a/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/GatewaySenderEventRemoteDispatcherIntegrationTest.java
 
b/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/GatewaySenderEventRemoteDispatcherIntegrationTest.java
index f564b08..1b17e6d 100644
--- 
a/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/GatewaySenderEventRemoteDispatcherIntegrationTest.java
+++ 
b/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/GatewaySenderEventRemoteDispatcherIntegrationTest.java
@@ -22,8 +22,6 @@ import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 
-import java.net.InetAddress;
-import java.net.UnknownHostException;
 import java.util.LinkedList;
 import java.util.Properties;
 
@@ -83,14 +81,6 @@ public class 
GatewaySenderEventRemoteDispatcherIntegrationTest {
         new GatewaySenderEventRemoteDispatcher(eventProcessor, connection);
 
     /*
-     * Set a HostnameResolver which simulates a failed
-     * hostname lookup resulting in an UnknownHostException
-     */
-    InternalDistributedMember.setHostnameResolver(ignored -> {
-      throw new UnknownHostException("a.b.c");
-    });
-
-    /*
      * We have mocked our connection to throw a RuntimeException when 
readAcknowledgement() is
      * called, then in the exception handling for that RuntimeException, the 
UnknownHostException
      * will be thrown when trying to notify listeners of the crash.
@@ -98,13 +88,6 @@ public class 
GatewaySenderEventRemoteDispatcherIntegrationTest {
     dispatcher.readAcknowledgement();
 
     /*
-     * Need to reset the hostname resolver to a real InetAddress resolver as 
it is static state and
-     * we do not want it to throw an UnknownHostException in subsequent test 
runs.
-     */
-    InternalDistributedMember
-        .setHostnameResolver((location) -> 
InetAddress.getByName(location.getHostName()));
-
-    /*
      * The handling of the UnknownHostException should not result in the event 
processor being
      * stopped, so assert that setIsStopped(true) was never called.
      */

Reply via email to