diff -ur orig/SDL_net-1.2.7/configure.in SDL_net-1.2.7/configure.in
--- orig/SDL_net-1.2.7/configure.in	2007-07-20 13:40:02.000000000 +0100
+++ SDL_net-1.2.7/configure.in	2009-06-11 22:03:21.000000000 +0100
@@ -80,6 +80,9 @@
 
 dnl Figure out which networking libraries to use
 case "$host" in
+    *mingw32ce*)
+        INETLIB="-lwinsock -lws2"
+	;;
     *-*-cygwin* | *-*-mingw32*)
         INETLIB="-lwsock32"
         ;;
diff -ur orig/SDL_net-1.2.7/SDLnet.c SDL_net-1.2.7/SDLnet.c
--- orig/SDL_net-1.2.7/SDLnet.c	2007-07-02 03:04:03.000000000 +0100
+++ SDL_net-1.2.7/SDLnet.c	2009-06-11 22:10:00.000000000 +0100
@@ -279,6 +279,20 @@
 #include <signal.h>
 #endif
 
+#ifndef __USE_W32_SOCKETS
+
+int SDLNet_GetLastError(void)
+{
+	return errno;
+}
+
+void SDLNet_SetLastError(int err)
+{
+	errno = err;
+}
+
+#endif
+
 /* Initialize/Cleanup the network API */
 int  SDLNet_Init(void)
 {
@@ -314,7 +328,9 @@
 		/* Clean up windows networking */
 		if ( WSACleanup() == SOCKET_ERROR ) {
 			if ( WSAGetLastError() == WSAEINPROGRESS ) {
+#ifndef _WIN32_WCE
 				WSACancelBlockingCall();
+#endif
 				WSACleanup();
 			}
 		}
diff -ur orig/SDL_net-1.2.7/SDLnetselect.c SDL_net-1.2.7/SDLnetselect.c
--- orig/SDL_net-1.2.7/SDLnetselect.c	2007-07-02 03:04:03.000000000 +0100
+++ SDL_net-1.2.7/SDLnetselect.c	2009-06-11 22:04:29.000000000 +0100
@@ -187,7 +187,7 @@
 
 	/* Check the file descriptors for available data */
 	do {
-		errno = 0;
+		SDLNet_SetLastError(0);
 
 		/* Set up the mask of file descriptors */
 		FD_ZERO(&mask);
@@ -201,7 +201,7 @@
 
 		/* Look! */
 		retval = select(maxfd+1, &mask, NULL, NULL, &tv);
-	} while ( errno == EINTR );
+	} while ( SDLNet_GetLastError() == EINTR );
 
 	/* Mark all file descriptors ready that have data available */
 	if ( retval > 0 ) {
diff -ur orig/SDL_net-1.2.7/SDLnetsys.h SDL_net-1.2.7/SDLnetsys.h
--- orig/SDL_net-1.2.7/SDLnetsys.h	2007-07-02 03:04:03.000000000 +0100
+++ SDL_net-1.2.7/SDLnetsys.h	2009-06-11 17:02:02.000000000 +0100
@@ -26,7 +26,10 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+
+#ifndef _WIN32_WCE
 #include <errno.h>
+#endif
 
 #ifdef macintosh
 #ifndef USE_GUSI_SOCKETS
@@ -82,3 +85,14 @@
 #endif /* __USE_W32_SOCKETS */
 #endif /* Open Transport */
 
+#ifdef __USE_W32_SOCKETS
+#define SDLNet_GetLastError WSAGetLastError
+#define SDLNet_SetLastError WSASetLastError
+#ifndef EINTR
+#define EINTR WSAEINTR
+#endif
+#else
+int SDLNet_GetLastError(void);
+void SDLNet_SetLastError(int err);
+#endif
+
diff -ur orig/SDL_net-1.2.7/SDLnetTCP.c SDL_net-1.2.7/SDLnetTCP.c
--- orig/SDL_net-1.2.7/SDLnetTCP.c	2007-07-15 06:55:42.000000000 +0100
+++ SDL_net-1.2.7/SDLnetTCP.c	2009-06-11 22:04:29.000000000 +0100
@@ -602,7 +602,7 @@
 	/* Keep sending data until it's sent or an error occurs */
 	left = len;
 	sent = 0;
-	errno = 0;
+	SDLNet_SetLastError(0);
 	do {
 		len = OTSnd(sock->channel, (void *)data, left, 0);
 		if (len == kOTFlowErr)
@@ -901,7 +901,7 @@
 	/* Keep sending data until it's sent or an error occurs */
 	left = len;
 	sent = 0;
-	errno = 0;
+	SDLNet_SetLastError(0);
 	do {
 		len = send(sock->channel, (const char *) data, left, 0);
 		if ( len > 0 ) {
@@ -909,7 +909,7 @@
 			left -= len;
 			data += len;
 		}
-	} while ( (left > 0) && ((len > 0) || (errno == EINTR)) );
+	} while ( (left > 0) && ((len > 0) || (SDLNet_GetLastError() == EINTR)) );
 
 	return(sent);
 }
@@ -930,10 +930,10 @@
 		return(-1);
 	}
 
-	errno = 0;
+	SDLNet_SetLastError(0);
 	do {
 		len = recv(sock->channel, (char *) data, maxlen, 0);
-	} while ( errno == EINTR );
+	} while ( SDLNet_GetLastError() == EINTR );
 
 	sock->ready = 0;
 	return(len);
diff -ur orig/SDL_net-1.2.7/SDLnetUDP.c SDL_net-1.2.7/SDLnetUDP.c
--- orig/SDL_net-1.2.7/SDLnetUDP.c	2007-07-02 03:04:03.000000000 +0100
+++ SDL_net-1.2.7/SDLnetUDP.c	2009-06-11 22:04:29.000000000 +0100
@@ -644,7 +644,7 @@
 #else
 	/* Check the file descriptors for available data */
 	do {
-		errno = 0;
+		SDLNet_SetLastError(0);
 
 		/* Set up the mask of file descriptors */
 		FD_ZERO(&mask);
@@ -656,7 +656,7 @@
 
 		/* Look! */
 		retval = select(sock+1, &mask, NULL, NULL, &tv);
-	} while ( errno == EINTR );
+	} while ( SDLNet_GetLastError() == EINTR );
 #endif /* MACOS_OPENTRANSPORT */
 
 	return(retval == 1);

