From ce0f4b02160ee72d7d2428867fe757bc37c68c98 Mon Sep 17 00:00:00 2001 From: David 'Digit' Turner Date: Thu, 25 Mar 2010 11:11:29 -0700 Subject: Fix Win32 socket error handling. This also fixes -http-proxy support on Windows. Change-Id: I741b224511c064412ac39351ed4f1b9146a313a5 --- sockets.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) (limited to 'sockets.c') diff --git a/sockets.c b/sockets.c index 839b94f..ece2564 100644 --- a/sockets.c +++ b/sockets.c @@ -14,10 +14,12 @@ #include #include #include "qemu_debug.h" +#include "qemu-char.h" #include #include #include "android/utils/path.h" #include "android/utils/debug.h" +#include "android/utils/misc.h" #define D(...) VERBOSE_PRINT(socket,__VA_ARGS__) @@ -74,14 +76,14 @@ static int winsock_error; EE(WSA_NOT_ENOUGH_MEMORY,ENOMEM,"not enough memory") \ EE(WSA_INVALID_PARAMETER,EINVAL,"invalid parameter") \ EE(WSAEINTR,EINTR,"interrupted function call") \ - EE(WSAEALREADY,EALREADY,"operation already in progress") \ + EE(WSAEALREADY,EALREADY,"operation already in progress") \ EE(WSAEBADF,EBADF,"bad file descriptor") \ EE(WSAEACCES,EACCES,"permission denied") \ EE(WSAEFAULT,EFAULT,"bad address") \ EE(WSAEINVAL,EINVAL,"invalid argument") \ EE(WSAEMFILE,EMFILE,"too many opened files") \ - EE(WSAEWOULDBLOCK,EAGAIN,"resource temporarily unavailable") \ - EE(WSAEINPROGRESS,EAGAIN,"operation now in progress") \ + EE(WSAEWOULDBLOCK,EWOULDBLOCK,"resource temporarily unavailable") \ + EE(WSAEINPROGRESS,EINPROGRESS,"operation now in progress") \ EE(WSAEALREADY,EAGAIN,"operation already in progress") \ EE(WSAENOTSOCK,EBADF,"socket operation not on socket") \ EE(WSAEDESTADDRREQ,EDESTADDRREQ,"destination address required") \ @@ -130,6 +132,8 @@ _fix_errno( void ) const WinsockError* werr = _winsock_errors; int unix = EINVAL; /* generic error code */ + winsock_error = WSAGetLastError(); + for ( ; werr->string != NULL; werr++ ) { if (werr->winsock == winsock_error) { unix = werr->unix; @@ -153,7 +157,7 @@ const char* _errno_str(void) { const WinsockError* werr = _winsock_errors; - const char* result = ""; + const char* result = NULL; for ( ; werr->string; werr++ ) { if (werr->winsock == winsock_error) { @@ -162,9 +166,11 @@ _errno_str(void) } } - if (result == NULL) - result = strerror(errno); - + if (result == NULL) { + result = tempstr_format( + "Unkown socket error (Winsock=0x%08x) errno=%d: %s", + winsock_error, errno, strerror(errno)); + } return result; } #else -- cgit v1.1