diff --git a/configure b/configure
index 53f65d2f7694229142f4c95e310cb7f3383a7d65..052b22ac16c4785e019aa267539ac6dc8c6ac240 100755
--- a/configure
+++ b/configure
@@ -1572,6 +1572,8 @@ fi
 
 enabled audio_beos && add_extralibs "-lmedia -lbe"
 
+enabled mingw32 && add_extralibs -lws2_32
+
 ##########################################
 # imlib check
 
diff --git a/libavformat/os_support.c b/libavformat/os_support.c
index 8372af292146492c2210a2e732aae3332348bf3d..5427c567e65fdcce8f0b3530dbb535c5a933084a 100644
--- a/libavformat/os_support.c
+++ b/libavformat/os_support.c
@@ -35,9 +35,14 @@
 #include <sys/time.h>
 #endif
 #include <time.h>
+
 #ifndef HAVE_SYS_POLL_H
+#if defined(__MINGW32__)
+#include <winsock2.h>
+#else
 #include <sys/select.h>
 #endif
+#endif
 
 /**
  * gets the current time in micro seconds.
diff --git a/libavformat/os_support.h b/libavformat/os_support.h
index f65755ad30d862d35fa19d51c4ced118c39782d3..34c2fabcd3914a1b96a1fa4c53570d82c012200c 100644
--- a/libavformat/os_support.h
+++ b/libavformat/os_support.h
@@ -32,7 +32,7 @@
  * - floatf() (OS/2)
  * - strcasecmp() (OS/2)
  * - closesocket()
- * - poll() (BeOS)
+ * - poll() (BeOS, MinGW)
  */
 
 #if defined(__BEOS__) || defined(__INNOTEK_LIBC__)
@@ -45,11 +45,7 @@ __declspec(dllimport) void __stdcall Sleep(unsigned long dwMilliseconds);
 #  define usleep(t)    Sleep((t) / 1000)
 #  include <fcntl.h>
 #  define lseek(f,p,w) _lseeki64((f), (p), (w))
-#endif
-
-/* XXX: check for Winsock here */
-#if 0
-#define HAVE_CLOSESOCKET 1
+#  define HAVE_CLOSESOCKET 1
 #endif
 
 #ifdef __BEOS__