diff options
Diffstat (limited to 'cpp/src/IceSSL/AcceptorI.cpp')
-rw-r--r-- | cpp/src/IceSSL/AcceptorI.cpp | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/cpp/src/IceSSL/AcceptorI.cpp b/cpp/src/IceSSL/AcceptorI.cpp index 7f467fee5c0..70fa17a3759 100644 --- a/cpp/src/IceSSL/AcceptorI.cpp +++ b/cpp/src/IceSSL/AcceptorI.cpp @@ -114,7 +114,7 @@ IceSSL::AcceptorI::accept(int timeout) void IceSSL::AcceptorI::connectToSelf() { - SOCKET fd = IceInternal::createSocket(false); + SOCKET fd = IceInternal::createSocket(false, _addr.ss_family); IceInternal::setBlock(fd, false); IceInternal::doConnect(fd, _addr, -1); IceInternal::closeSocket(fd); @@ -127,9 +127,16 @@ IceSSL::AcceptorI::toString() const } int -IceSSL::AcceptorI::effectivePort() +IceSSL::AcceptorI::effectivePort() const { - return ntohs(_addr.sin_port); + if(_addr.ss_family == AF_INET) + { + return ntohs(reinterpret_cast<const sockaddr_in*>(&_addr)->sin_port); + } + else + { + return ntohs(reinterpret_cast<const sockaddr_in6*>(&_addr)->sin6_port); + } } IceSSL::AcceptorI::AcceptorI(const InstancePtr& instance, const string& adapterName, const string& host, int port) : @@ -145,9 +152,9 @@ IceSSL::AcceptorI::AcceptorI(const InstancePtr& instance, const string& adapterN try { - _fd = IceInternal::createSocket(false); + IceInternal::getAddressForServer(host, port, _addr, _instance->protocolSupport()); + _fd = IceInternal::createSocket(false, _addr.ss_family); IceInternal::setBlock(_fd, false); - IceInternal::getAddress(host, port, _addr); IceInternal::setTcpBufSize(_fd, _instance->communicator()->getProperties(), _logger); #ifndef _WIN32 // |