aboutsummaryrefslogtreecommitdiffstats
path: root/sockets.c
diff options
context:
space:
mode:
authorDavid 'Digit' Turner <digit@google.com>2010-03-25 11:11:29 -0700
committerDavid 'Digit' Turner <digit@google.com>2010-03-25 14:19:42 -0700
commitce0f4b02160ee72d7d2428867fe757bc37c68c98 (patch)
tree13dee7797fad78fbde1fcb2869f7b85e26622e39 /sockets.c
parentca52b2260ba9f9bac07092c3d8260ed523de1fe1 (diff)
downloadexternal_qemu-ce0f4b02160ee72d7d2428867fe757bc37c68c98.zip
external_qemu-ce0f4b02160ee72d7d2428867fe757bc37c68c98.tar.gz
external_qemu-ce0f4b02160ee72d7d2428867fe757bc37c68c98.tar.bz2
Fix Win32 socket error handling.
This also fixes -http-proxy support on Windows. Change-Id: I741b224511c064412ac39351ed4f1b9146a313a5
Diffstat (limited to 'sockets.c')
-rw-r--r--sockets.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/sockets.c b/sockets.c
index 839b94f..ece2564 100644
--- a/sockets.c
+++ b/sockets.c
@@ -14,10 +14,12 @@
#include <fcntl.h>
#include <stddef.h>
#include "qemu_debug.h"
+#include "qemu-char.h"
#include <stdlib.h>
#include <string.h>
#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 = "<unknown error>";
+ 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