diff options
author | Benoit Foucher <benoit@zeroc.com> | 2016-04-27 14:33:30 +0200 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2016-04-27 14:33:30 +0200 |
commit | c62cd6c4d50c7f762aefc76bc36bfa1e34022e72 (patch) | |
tree | c1751dc479145b27fe66ccebd56b257b2b3e04f9 /cpp/src/Ice/Network.cpp | |
parent | Added ClientPrivate.js to .gitignore (diff) | |
download | ice-c62cd6c4d50c7f762aefc76bc36bfa1e34022e72.tar.bz2 ice-c62cd6c4d50c7f762aefc76bc36bfa1e34022e72.tar.xz ice-c62cd6c4d50c7f762aefc76bc36bfa1e34022e72.zip |
Fix to no longer close the socket on fdToString failure, the caller is now closing the socket if necessary
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; |