diff options
Diffstat (limited to 'cpp/src/Ice/EndpointI.cpp')
-rw-r--r-- | cpp/src/Ice/EndpointI.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/cpp/src/Ice/EndpointI.cpp b/cpp/src/Ice/EndpointI.cpp index b084d8f4a8b..d53cf2ec612 100644 --- a/cpp/src/Ice/EndpointI.cpp +++ b/cpp/src/Ice/EndpointI.cpp @@ -191,7 +191,16 @@ IceInternal::EndpointHostResolver::EndpointHostResolver(const InstancePtr& insta vector<ConnectorPtr> IceInternal::EndpointHostResolver::resolve(const string& host, int port, const EndpointIPtr& endpoint) { - vector<ConnectorPtr> connectors; + // + // Try to get the addresses without DNS lookup. If this doesn't + // work, we retry with DNS lookup (and observer). + // + vector<struct sockaddr_storage> addrs = getAddresses(host, port, _instance->protocolSupport(), false); + if(!addrs.empty()) + { + return endpoint->connectors(addrs); + } + ObserverHelperT<> observer; const CommunicatorObserverPtr& obsv = _instance->initializationData().observer; if(obsv) @@ -199,6 +208,7 @@ IceInternal::EndpointHostResolver::resolve(const string& host, int port, const E observer.attach(obsv->getEndpointLookupObserver(endpoint->getInfo(), endpoint->toString())); } + vector<ConnectorPtr> connectors; try { connectors = endpoint->connectors(getAddresses(host, port, _instance->protocolSupport(), true)); |