diff options
Diffstat (limited to 'cpp/src/Ice/Network.cpp')
-rw-r--r-- | cpp/src/Ice/Network.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/cpp/src/Ice/Network.cpp b/cpp/src/Ice/Network.cpp index d7c1c22ba92..7fa9614379c 100644 --- a/cpp/src/Ice/Network.cpp +++ b/cpp/src/Ice/Network.cpp @@ -1238,7 +1238,17 @@ IceInternal::closeSocket(SOCKET fd) WSASetLastError(error); #else int error = errno; + +# if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) + // + // FreeBSD returns ECONNRESET if the underlying object was + // a stream socket that was shut down by the peer before all + // pending data was delivered. + // + if(close(fd) == SOCKET_ERROR && getSocketErrno() != ECONNRESET) +# else if(close(fd) == SOCKET_ERROR) +# endif { SocketException ex(__FILE__, __LINE__); ex.error = getSocketErrno(); |