diff options
Diffstat (limited to 'lib/server/SocketStream.cpp')
-rw-r--r-- | lib/server/SocketStream.cpp | 66 |
1 files changed, 52 insertions, 14 deletions
diff --git a/lib/server/SocketStream.cpp b/lib/server/SocketStream.cpp index 49bf18b2..38370598 100644 --- a/lib/server/SocketStream.cpp +++ b/lib/server/SocketStream.cpp @@ -1,4 +1,4 @@ -// distribution boxbackup-0.10 (svn version: 494) +// distribution boxbackup-0.11rc1 (svn version: 2023_2024) // // Copyright (c) 2003 - 2006 // Ben Summers and contributors. All rights reserved. @@ -53,6 +53,7 @@ #include <sys/types.h> #include <errno.h> +#include <string.h> #ifndef WIN32 #include <poll.h> @@ -74,7 +75,7 @@ // // -------------------------------------------------------------------------- SocketStream::SocketStream() - : mSocketHandle(-1), + : mSocketHandle(INVALID_SOCKET_VALUE), mReadClosed(false), mWriteClosed(false), mBytesRead(0), @@ -123,7 +124,7 @@ SocketStream::SocketStream(const SocketStream &rToCopy) { THROW_EXCEPTION(ServerException, BadSocketHandle); } - if(mSocketHandle == -1) + if(mSocketHandle == INVALID_SOCKET_VALUE) { THROW_EXCEPTION(ServerException, DupError); } @@ -139,7 +140,7 @@ SocketStream::SocketStream(const SocketStream &rToCopy) // -------------------------------------------------------------------------- SocketStream::~SocketStream() { - if(mSocketHandle != -1) + if(mSocketHandle != INVALID_SOCKET_VALUE) { Close(); } @@ -155,7 +156,10 @@ SocketStream::~SocketStream() // -------------------------------------------------------------------------- void SocketStream::Attach(int socket) { - if(mSocketHandle != -1) {THROW_EXCEPTION(ServerException, SocketAlreadyOpen)} + if(mSocketHandle != INVALID_SOCKET_VALUE) + { + THROW_EXCEPTION(ServerException, SocketAlreadyOpen) + } mSocketHandle = socket; ResetCounters(); @@ -172,7 +176,10 @@ void SocketStream::Attach(int socket) // -------------------------------------------------------------------------- void SocketStream::Open(int Type, const char *Name, int Port) { - if(mSocketHandle != -1) {THROW_EXCEPTION(ServerException, SocketAlreadyOpen)} + if(mSocketHandle != INVALID_SOCKET_VALUE) + { + THROW_EXCEPTION(ServerException, SocketAlreadyOpen) + } // Setup parameters based on type, looking up names if required int sockDomain = 0; @@ -182,7 +189,7 @@ void SocketStream::Open(int Type, const char *Name, int Port) // Create the socket mSocketHandle = ::socket(sockDomain, SOCK_STREAM, 0 /* let OS choose protocol */); - if(mSocketHandle == -1) + if(mSocketHandle == INVALID_SOCKET_VALUE) { THROW_EXCEPTION(ServerException, SocketOpenError) } @@ -192,13 +199,29 @@ void SocketStream::Open(int Type, const char *Name, int Port) { // Dispose of the socket #ifdef WIN32 + DWORD err = WSAGetLastError(); ::closesocket(mSocketHandle); #else + int err = errno; ::close(mSocketHandle); #endif - mSocketHandle = -1; + +#ifdef WIN32 + BOX_ERROR("Failed to connect to socket (type " << Type << + ", name " << Name << ", port " << Port << "): " << + GetErrorMessage(err) + ); +#else + BOX_ERROR("Failed to connect to socket (type " << Type << + ", name " << Name << ", port " << Port << "): " << + strerror(err) << " (" << err << ")" + ); +#endif + + mSocketHandle = INVALID_SOCKET_VALUE; THROW_EXCEPTION(ConnectionException, Conn_SocketConnectError) } + ResetCounters(); } @@ -212,7 +235,10 @@ void SocketStream::Open(int Type, const char *Name, int Port) // -------------------------------------------------------------------------- int SocketStream::Read(void *pBuffer, int NBytes, int Timeout) { - if(mSocketHandle == -1) {THROW_EXCEPTION(ServerException, BadSocketHandle)} + if(mSocketHandle == INVALID_SOCKET_VALUE) + { + THROW_EXCEPTION(ServerException, BadSocketHandle) + } if(Timeout != IOStream::TimeOutInfinite) { @@ -285,7 +311,10 @@ int SocketStream::Read(void *pBuffer, int NBytes, int Timeout) // -------------------------------------------------------------------------- void SocketStream::Write(const void *pBuffer, int NBytes) { - if(mSocketHandle == -1) {THROW_EXCEPTION(ServerException, BadSocketHandle)} + if(mSocketHandle == INVALID_SOCKET_VALUE) + { + THROW_EXCEPTION(ServerException, BadSocketHandle) + } // Buffer in byte sized type. ASSERT(sizeof(char) == 1); @@ -349,7 +378,10 @@ void SocketStream::Write(const void *pBuffer, int NBytes) // -------------------------------------------------------------------------- void SocketStream::Close() { - if(mSocketHandle == -1) {THROW_EXCEPTION(ServerException, BadSocketHandle)} + if(mSocketHandle == INVALID_SOCKET_VALUE) + { + THROW_EXCEPTION(ServerException, BadSocketHandle) + } #ifdef WIN32 if(::closesocket(mSocketHandle) == -1) #else @@ -358,7 +390,7 @@ void SocketStream::Close() { THROW_EXCEPTION(ServerException, SocketCloseError) } - mSocketHandle = -1; + mSocketHandle = INVALID_SOCKET_VALUE; } // -------------------------------------------------------------------------- @@ -371,7 +403,10 @@ void SocketStream::Close() // -------------------------------------------------------------------------- void SocketStream::Shutdown(bool Read, bool Write) { - if(mSocketHandle == -1) {THROW_EXCEPTION(ServerException, BadSocketHandle)} + if(mSocketHandle == INVALID_SOCKET_VALUE) + { + THROW_EXCEPTION(ServerException, BadSocketHandle) + } // Do anything? if(!Read && !Write) return; @@ -426,7 +461,10 @@ bool SocketStream::StreamClosed() // -------------------------------------------------------------------------- tOSSocketHandle SocketStream::GetSocketHandle() { - if(mSocketHandle == -1) {THROW_EXCEPTION(ServerException, BadSocketHandle)} + if(mSocketHandle == INVALID_SOCKET_VALUE) + { + THROW_EXCEPTION(ServerException, BadSocketHandle) + } return mSocketHandle; } |