diff --git a/lib/cpp/README_WINDOWS b/lib/cpp/README_WINDOWS
index 3a00b3a..a955949 100644
--- a/lib/cpp/README_WINDOWS
+++ b/lib/cpp/README_WINDOWS
@@ -75,6 +75,13 @@
 If you wanted instead to link with boost thread as a shared library,
 you'll need to uncomment those two lines, and recompile.
 
+Windows version compatibility
+=============================
+The Thrift library targets Windows XP for broadest compatbility. A notable
+difference is in the Windows-specific implementation of the socket poll
+function. To target Vista, Win7 or other versions, comment out the line
+#define TARGET_WIN_XP.
+
 Known issues
 ============
 
diff --git a/lib/cpp/src/windows/TargetVersion.h b/lib/cpp/src/windows/TargetVersion.h
index 8c392fc..35c093f 100644
--- a/lib/cpp/src/windows/TargetVersion.h
+++ b/lib/cpp/src/windows/TargetVersion.h
@@ -28,8 +28,4 @@
 #error This is a MSVC header only.
 #endif
 
-#ifndef _WIN32_WINNT
-#define _WIN32_WINNT 0x0601
-#endif
-
 #endif //_THIRFT_WINDOWS_TARGETVERSION_H_
diff --git a/lib/cpp/src/windows/config.h b/lib/cpp/src/windows/config.h
index 79168cf..c4bf9f3 100644
--- a/lib/cpp/src/windows/config.h
+++ b/lib/cpp/src/windows/config.h
@@ -59,8 +59,8 @@
 #	include <pthread.h>
 #else
 struct timespec {
-	int64_t tv_sec;
-	int64_t tv_nsec;
+  int64_t tv_sec;
+  int64_t tv_nsec;
 };
 #	define USE_BOOST_THREAD 1
 #	define ctime_r( _clock, _buf ) \
@@ -78,44 +78,73 @@
     return 0;
 }
 
-#if WINVER <= 0x0502
+#if WINVER <= 0x0502 //XP, Server2003
+#define POLLIN  0x0300
+#define POLLOUT 0x0010
 #define poll(fds, nfds, timeout) \
     poll_win32(fds, nfds, timeout)
 
 typedef struct pollfd {
-
-    SOCKET  fd;
-    SHORT   events;
-    SHORT   revents;
-
+  SOCKET  fd;
+  SHORT   events;
+  SHORT   revents;
 } WSAPOLLFD, *PWSAPOLLFD, FAR *LPWSAPOLLFD;
 
-inline int poll_win32(LPWSAPOLLFD fdArray, ULONG /*fds*/, INT timeout)
+inline int poll_win32(LPWSAPOLLFD fdArray, ULONG nfds, INT timeout)
 {
-    fd_set read_fds;
-    fd_set write_fds;
-    fd_set except_fds;
+  fd_set read_fds, write_fds;
+  fd_set* read_fds_ptr  = NULL;
+  fd_set* write_fds_ptr = NULL;
 
-    FD_ZERO(&read_fds);
-    FD_ZERO(&write_fds);
-    FD_ZERO(&except_fds);
+  FD_ZERO(&read_fds);
+  FD_ZERO(&write_fds);
 
-    FD_SET(fdArray[0].fd, &read_fds);
-    FD_SET(fdArray[0].fd, &write_fds);
-    FD_SET(fdArray[0].fd, &except_fds);
+  for(ULONG i=0; i<nfds; i++) {
+    //Read (in) socket
+    if((fdArray[i].events & POLLIN) == POLLIN) {
+      read_fds_ptr = &read_fds;
+      FD_SET(fdArray[i].fd, &read_fds);
+    }
+    //Write (out) socket
+    else if((fdArray[i].events & POLLOUT) == POLLOUT) {
+      write_fds_ptr = &write_fds;
+      FD_SET(fdArray[i].fd, &write_fds);
+    }
+  }
 
+  timeval time_out;
+  timeval* time_out_ptr = NULL;
+  if(timeout >= 0) {
     timeval time_out = {timeout / 1000, timeout * 1000};
-    return select(1, &read_fds, &write_fds, &except_fds, &time_out);
+    time_out_ptr = &time_out;
+  }
+  else { //to avoid compiler warnings
+    (void)time_out;
+    (void)timeout;
+  }
+
+  int sktready = select(1, read_fds_ptr, write_fds_ptr, NULL, time_out_ptr);
+  if(sktready > 0) {
+    for(ULONG i=0; i<read_fds.fd_count; i++) {
+      if(FD_ISSET(fdArray[i].fd, &read_fds))
+        fdArray[i].revents = POLLIN;
+    }
+    for(ULONG i=0; i<write_fds.fd_count; i++) {
+      if(FD_ISSET(fdArray[i].fd, &write_fds))
+        fdArray[i].revents = POLLOUT;
+    }
+  }
+  return sktready;
 }
-#else
-	inline int poll(struct pollfd* fdArray, ULONG fds, INT timeout) {
-		return WSAPoll(fdArray, fds, timeout);
-	}
+#else //Vista, Win7...
+  inline int poll(struct pollfd* fdArray, ULONG fds, INT timeout) {
+    return WSAPoll(fdArray, fds, timeout);
+  }
 #endif // WINVER
 
-inline int close(SOCKET socket)
+inline void close(SOCKET socket)
 {
-    return ::closesocket(socket);
+    ::closesocket(socket);
 }
 
 #endif // _THRIFT_WINDOWS_CONFIG_H_
diff --git a/lib/cpp/src/windows/force_inc.h b/lib/cpp/src/windows/force_inc.h
index 2ee0207..803d132 100644
--- a/lib/cpp/src/windows/force_inc.h
+++ b/lib/cpp/src/windows/force_inc.h
@@ -18,19 +18,29 @@
  */
 
 #ifndef _THRIFT_WINDOWS_FORCEINC_H_
-#define _THRIFT_WINDOWS_FORCEINC_H_
+#  define _THRIFT_WINDOWS_FORCEINC_H_
 
 #if defined(_MSC_VER) && (_MSC_VER > 1200)
-#pragma once
+#  pragma once
 #endif // _MSC_VER
 
 #ifndef _WIN32
-#error This is a MSVC header only.
+#  error This is a MSVC header only.
 #endif
 
 #define NOMINMAX
 #define BOOST_ALL_NO_LIB 1
 #define BOOST_THREAD_NO_LIB 1
+#define TARGET_WIN_XP
+
+#ifdef TARGET_WIN_XP
+#  define WINVER 0x0501
+#  define _WIN32_WINNT 0x0501
+#endif
+
+#ifndef _WIN32_WINNT
+#  define _WIN32_WINNT 0x0601
+#endif
 
 #include "windows/config.h"
 
