diff options
Diffstat (limited to 'cpp/src/Ice/Network.cpp')
-rw-r--r-- | cpp/src/Ice/Network.cpp | 35 |
1 files changed, 27 insertions, 8 deletions
diff --git a/cpp/src/Ice/Network.cpp b/cpp/src/Ice/Network.cpp index 0ceea888aaa..7f8477884bc 100644 --- a/cpp/src/Ice/Network.cpp +++ b/cpp/src/Ice/Network.cpp @@ -774,28 +774,38 @@ IceInternal::createPipe(SOCKET fds[2]) try { fds[0] = createSocket(false); - setBlock(fds[0], true); } catch(...) { - closeSocket(fd); + ::closesocket(fd); throw; } try { + setBlock(fds[0], true); doConnect(fds[0], addr, -1); fds[1] = doAccept(fd, -1); - setBlock(fds[1], true); } catch(...) { - closeSocket(fd); - closeSocket(fds[0]); + ::closesocket(fd); + ::closeSocket(fds[0]); throw; } - closeSocket(fd); + ::closeSocket(fd); + + try + { + setBlock(fds[1], true); + } + catch(...) + { + ::closesocket(fds[0]); + ::closesocket(fds[1]); + throw; + } #else @@ -806,8 +816,17 @@ IceInternal::createPipe(SOCKET fds[2]) throw ex; } - setBlock(fds[0], true); - setBlock(fds[1], true); + try + { + setBlock(fds[0], true); + setBlock(fds[1], true); + } + catch(...) + { + close(fds[0]); + close(fds[1]); + throw; + } #endif } |