ClientBasic stores an AbstractMessagingPort as _messaging port. That AbstractMessagingPort has a HostAndPort that can be accessed by calling remote(). ClientBasic has a method getRemote() that returns _messagingPort->remote().
ClientBasic's subclass, ClientInfo, stores a HostAndPort as _remote directly, and overrides the getRemote() method to return _remote instead of _messagingPort->remote().
From what I can tell, however, ClientInfo's _remote always get's set to the remote() from the same AbstractMessagingPort that it is storing in _messagingPort as part of its ClientBasic data.
We should always use _messagingPort->remote(), and make getRemote in ClientBasic no longer virtual.