diff options
Diffstat (limited to 'cpp/src/Ice/Network.cpp')
-rw-r--r-- | cpp/src/Ice/Network.cpp | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/cpp/src/Ice/Network.cpp b/cpp/src/Ice/Network.cpp index 56d3f0314f0..d7c1c22ba92 100644 --- a/cpp/src/Ice/Network.cpp +++ b/cpp/src/Ice/Network.cpp @@ -1263,7 +1263,6 @@ IceInternal::fdToLocalAddress(SOCKET fd, Address& addr) socklen_t len = static_cast<socklen_t>(sizeof(sockaddr_storage)); if(getsockname(fd, &addr.sa, &len) == SOCKET_ERROR) { - closeSocketNoThrow(fd); SocketException ex(__FILE__, __LINE__); ex.error = getSocketErrno(); throw ex; @@ -1297,7 +1296,6 @@ IceInternal::fdToRemoteAddress(SOCKET fd, Address& addr) } else { - closeSocketNoThrow(fd); SocketException ex(__FILE__, __LINE__); ex.error = getSocketErrno(); throw ex; @@ -2316,12 +2314,20 @@ repeatConnect: // port as the server). // Address localAddr; - fdToLocalAddress(fd, localAddr); - if(compareAddress(addr, localAddr) == 0) + try { - ConnectionRefusedException ex(__FILE__, __LINE__); - ex.error = 0; // No appropriate errno - throw ex; + fdToLocalAddress(fd, localAddr); + if(compareAddress(addr, localAddr) == 0) + { + ConnectionRefusedException ex(__FILE__, __LINE__); + ex.error = 0; // No appropriate errno + throw ex; + } + } + catch(const LocalException&) + { + closeSocketNoThrow(fd); + throw; } #endif return true; |