/* File: socketManager.cpp Author: Sean Neubert This class is for managing our sockets classes and such... */ #include "socketManager.h" // this will be file scope... static WSADATA wsaData; // so here we will load our windows DLL...if needed... bool socketManager::initFramework(){ #ifdef WIN32 /* Load Winsock 2.0 DLL */ if (WSAStartup(MAKEWORD(2, 0), &wsaData) != 0){ return false; } // end of checking #endif return true; } // end of initSocket // so here we will unload our windows DLL...again, this is only if needed bool socketManager::cleanFramework(){ #ifdef WIN32 WSACleanup(); /* Cleanup Winsock */ #endif return true; } // end of cleanSocket // this is to keep our error handling cross platform... const char * socketManager::getSocketError(){ #ifdef WIN32 return socketManager::getWSAMsg( WSAGetLastError() ); #else return strerror( errno ); #endif } // end of getSocketError function #ifdef WIN32 /* we'll return what the error is... Note that there is likely a smarter way to do this. I don't know what it is at the moment, so here it is. It's long too, sorry :-( */ const char * socketManager::getWSAMsg( int error ){ switch( error ){ case WSAEINTR: return "Interrupted function call"; break; case WSAEACCES: return "Permission denied"; break; case WSAEFAULT: return "Bad address"; break; case WSAEINVAL: return "Invalid argument"; break; case WSAEMFILE: return "Too many open files"; break; case WSAEWOULDBLOCK: return "Resource temporarily unavailable"; break; case WSAEINPROGRESS: return "Operation now in progress"; break; case WSAEALREADY: return "Operation already in progress"; break; case WSAENOTSOCK: return "Socket operation on nonsocket"; break; case WSAEDESTADDRREQ: return "Destination address required"; break; case WSAEMSGSIZE: return "Message too long"; break; case WSAEPROTOTYPE: return "Protocol wrong type for socket"; break; case WSAENOPROTOOPT: return "Bad protocol option"; break; case WSAEPROTONOSUPPORT: return "Protocol not supported"; break; case WSAESOCKTNOSUPPORT: return "Socket type not supported"; break; case WSAEOPNOTSUPP: return "Operation not supported"; break; case WSAEPFNOSUPPORT: return "Protocol family not supported"; break; case WSAEAFNOSUPPORT: return "Address family not supported by protocol family"; break; case WSAEADDRINUSE: return "Address already in use"; break; case WSAEADDRNOTAVAIL: return "Cannot assign requested address"; break; case WSAENETDOWN: return "Network is down"; break; case WSAENETUNREACH: return "Network is unreachable"; break; case WSAENETRESET: return "Network dropped connection on reset"; break; case WSAECONNABORTED: return "Software caused connection abort"; break; case WSAECONNRESET: return "Connection reset by peer"; break; case WSAENOBUFS: return "No buffer space available"; break; case WSAEISCONN: return "Socket is already connected"; break; case WSAENOTCONN: return "Socket is not connected"; break; case WSAESHUTDOWN: return "Cannot send after socket shutdown"; break; case WSAETIMEDOUT: return "Connection timed out"; break; case WSAECONNREFUSED: return "Connection refused"; break; case WSAEHOSTDOWN: return "Host is down"; break; case WSAEHOSTUNREACH: return "No route to host"; break; case WSAEPROCLIM: return "Too many processes"; break; case WSASYSNOTREADY: return "Network subsystem is unavailable"; break; case WSAVERNOTSUPPORTED: return "Winsock.dll version out of range"; break; case WSANOTINITIALISED: return "Successful WSAStartup not yet performed"; break; case WSAEDISCON: return "Graceful shutdown in progress"; break; case WSATYPE_NOT_FOUND: return "Class type not found"; break; case WSAHOST_NOT_FOUND: return "Host not found"; break; case WSATRY_AGAIN: return "Nonauthoritative host not found"; break; case WSANO_RECOVERY: return "This is a nonrecoverable error"; break; case WSANO_DATA: return "Valid name, no data record of requested type"; break; /* case WSA_INVALID_HANDLE: return "Specified event object handle is invalid"; break; case WSA_INVALID_PARAMETER: return "One or more parameters are invalid"; break; case WSA_IO_INCOMPLETE: return "Overlapped I/O event object not in signaled state"; break; case WSA_IO_PENDING: return "Overlapped operations will complete later"; break; case WSA_NOT_ENOUGH_MEMORY: return "Insufficient memory available"; break; case WSA_OPERATION_ABORTED: return "Overlapped operation aborted"; break; case WSAINVALIDPROCTABLE: return "Invalid procedure table from service provider"; break; case WSAINVALIDPROVIDER: return "Invalid service provider version number"; break; case WSAPROVIDERFAILEDINIT: return "Unable to initilize a service provider"; break; case WSASYSCALLFAILURE: return "System call failure"; break; */ } // end of switch statement return "Unknown Error"; } // end of getWSAMsg #endif // EOF