--- /dev/null
+#include <winsock2.h>
+
+#define __RETSTR( x ) case x: return #x;
+
+char *WSAGetErrorString( int err )
+{
+
+ switch( err )
+ {
+ __RETSTR( WSAEINTR )
+ __RETSTR( WSAEBADF )
+ __RETSTR( WSAEACCES )
+ __RETSTR( WSAEFAULT )
+ __RETSTR( WSAEINVAL )
+ __RETSTR( WSAEMFILE )
+ __RETSTR( WSAEWOULDBLOCK )
+ __RETSTR( WSAEINPROGRESS )
+ __RETSTR( WSAEALREADY )
+ __RETSTR( WSAENOTSOCK )
+ __RETSTR( WSAEDESTADDRREQ )
+ __RETSTR( WSAEMSGSIZE )
+ __RETSTR( WSAEPROTOTYPE )
+ __RETSTR( WSAENOPROTOOPT )
+ __RETSTR( WSAEPROTONOSUPPORT )
+ __RETSTR( WSAESOCKTNOSUPPORT )
+ __RETSTR( WSAEOPNOTSUPP )
+ __RETSTR( WSAEPFNOSUPPORT )
+ __RETSTR( WSAEAFNOSUPPORT )
+ __RETSTR( WSAEADDRINUSE )
+ __RETSTR( WSAEADDRNOTAVAIL )
+ __RETSTR( WSAENETDOWN )
+ __RETSTR( WSAENETUNREACH )
+ __RETSTR( WSAENETRESET )
+ __RETSTR( WSAECONNABORTED )
+ __RETSTR( WSAECONNRESET )
+ __RETSTR( WSAENOBUFS )
+ __RETSTR( WSAEISCONN )
+ __RETSTR( WSAENOTCONN )
+ __RETSTR( WSAESHUTDOWN )
+ __RETSTR( WSAETOOMANYREFS )
+ __RETSTR( WSAETIMEDOUT )
+ __RETSTR( WSAECONNREFUSED )
+ __RETSTR( WSAELOOP )
+ __RETSTR( WSAENAMETOOLONG )
+ __RETSTR( WSAEHOSTDOWN )
+ __RETSTR( WSAEHOSTUNREACH )
+ __RETSTR( WSAENOTEMPTY )
+ __RETSTR( WSAEPROCLIM )
+ __RETSTR( WSAEUSERS )
+ __RETSTR( WSAEDQUOT )
+ __RETSTR( WSAESTALE )
+ __RETSTR( WSAEREMOTE )
+ __RETSTR( WSASYSNOTREADY )
+ __RETSTR( WSAVERNOTSUPPORTED )
+ __RETSTR( WSANOTINITIALISED )
+ __RETSTR( WSAEDISCON )
+ __RETSTR( WSAENOMORE )
+ __RETSTR( WSAECANCELLED )
+ __RETSTR( WSAEINVALIDPROCTABLE )
+ __RETSTR( WSAEINVALIDPROVIDER )
+ __RETSTR( WSASYSCALLFAILURE )
+ __RETSTR( WSASERVICE_NOT_FOUND )
+ __RETSTR( WSATYPE_NOT_FOUND )
+ __RETSTR( WSA_E_NO_MORE )
+ __RETSTR( WSA_E_CANCELLED )
+ __RETSTR( WSAEREFUSED )
+
+ __RETSTR( WSAHOST_NOT_FOUND )
+ __RETSTR( WSATRY_AGAIN )
+ __RETSTR( WSANO_RECOVERY )
+ __RETSTR( WSANO_DATA )
+
+ }
+ return "unknown";
+}
+
+char *WSAGetLastErrorString( void )
+{
+ return WSAGetErrorString( WSAGetLastError() );
+}
+
+#undef __RETSTR
\ No newline at end of file