summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/ConnectionFactory.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2017-04-10 19:33:17 +0200
committerBenoit Foucher <benoit@zeroc.com>2017-04-10 19:33:17 +0200
commit1fa97b799b91fa6b0842e3267fec3d6e3a240df5 (patch)
tree1bc3abfddbcb66b51c776da15e2d88586ca2bbf4 /cpp/src/Ice/ConnectionFactory.cpp
parentFix (ICE-7771) - UWP build fails, missing targets file (diff)
downloadice-1fa97b799b91fa6b0842e3267fec3d6e3a240df5.tar.bz2
ice-1fa97b799b91fa6b0842e3267fec3d6e3a240df5.tar.xz
ice-1fa97b799b91fa6b0842e3267fec3d6e3a240df5.zip
Fixed ICE-7755 - listen on all IPs associated with a DNS name
Diffstat (limited to 'cpp/src/Ice/ConnectionFactory.cpp')
-rw-r--r--cpp/src/Ice/ConnectionFactory.cpp19
1 files changed, 18 insertions, 1 deletions
diff --git a/cpp/src/Ice/ConnectionFactory.cpp b/cpp/src/Ice/ConnectionFactory.cpp
index 51f2c58cfb7..0858c97a556 100644
--- a/cpp/src/Ice/ConnectionFactory.cpp
+++ b/cpp/src/Ice/ConnectionFactory.cpp
@@ -1255,10 +1255,25 @@ IceInternal::IncomingConnectionFactory::waitUntilFinished()
}
}
+bool
+IceInternal::IncomingConnectionFactory::isLocal(const EndpointIPtr& endpoint) const
+{
+ if(_publishedEndpoint && endpoint->equivalent(_publishedEndpoint))
+ {
+ return true;
+ }
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ return endpoint->equivalent(_endpoint);
+}
+
EndpointIPtr
IceInternal::IncomingConnectionFactory::endpoint() const
{
- // No mutex protection necessary, _endpoint is immutable.
+ if(_publishedEndpoint)
+ {
+ return _publishedEndpoint;
+ }
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
return _endpoint;
}
@@ -1561,10 +1576,12 @@ IceInternal::IncomingConnectionFactory::connectionStartFailed(const Ice::Connect
//
IceInternal::IncomingConnectionFactory::IncomingConnectionFactory(const InstancePtr& instance,
const EndpointIPtr& endpoint,
+ const EndpointIPtr& publishedEndpoint,
const ObjectAdapterIPtr& adapter) :
_instance(instance),
_monitor(new FactoryACMMonitor(instance, dynamic_cast<ObjectAdapterI*>(adapter.get())->getACM())),
_endpoint(endpoint),
+ _publishedEndpoint(publishedEndpoint),
_acceptorStarted(false),
_acceptorStopped(false),
_adapter(adapter),