diff --git a/libavformat/os_support.c b/libavformat/os_support.c
index 120f23469fa672553e21b3ce3b2afa9413612928..58215ec19865cc52463d8db4cf91093f199f2d50 100644
--- a/libavformat/os_support.c
+++ b/libavformat/os_support.c
@@ -68,6 +68,16 @@ int ff_getaddrinfo(const char *node, const char *service,
     struct addrinfo *ai;
     struct sockaddr_in *sin;
 
+#if HAVE_WINSOCK2_H
+    int (WSAAPI *win_getaddrinfo)(const char *node, const char *service,
+                                  const struct addrinfo *hints,
+                                  struct addrinfo **res);
+    HMODULE ws2mod = GetModuleHandle("ws2_32.dll");
+    win_getaddrinfo = GetProcAddress(ws2mod, "getaddrinfo");
+    if (win_getaddrinfo)
+        return win_getaddrinfo(node, service, hints, res);
+#endif
+
     sin = av_mallocz(sizeof(struct sockaddr_in));
     if (!sin)
         return EAI_FAIL;
@@ -124,6 +134,17 @@ int ff_getaddrinfo(const char *node, const char *service,
 
 void ff_freeaddrinfo(struct addrinfo *res)
 {
+#if HAVE_WINSOCK2_H
+    void (WSAAPI *win_freeaddrinfo)(struct addrinfo *res);
+    HMODULE ws2mod = GetModuleHandle("ws2_32.dll");
+    win_freeaddrinfo = (void (WSAAPI *)(struct addrinfo *res))
+                       GetProcAddress(ws2mod, "freeaddrinfo");
+    if (win_freeaddrinfo) {
+        win_freeaddrinfo(res);
+        return;
+    }
+#endif
+
     av_free(res->ai_canonname);
     av_free(res->ai_addr);
     av_free(res);
@@ -135,6 +156,16 @@ int ff_getnameinfo(const struct sockaddr *sa, int salen,
 {
     const struct sockaddr_in *sin = (const struct sockaddr_in *)sa;
 
+#if HAVE_WINSOCK2_H
+    int (WSAAPI *win_getnameinfo)(const struct sockaddr *sa, socklen_t salen,
+                                  char *host, DWORD hostlen,
+                                  char *serv, DWORD servlen, int flags);
+    HMODULE ws2mod = GetModuleHandle("ws2_32.dll");
+    win_getnameinfo = GetProcAddress(ws2mod, "getnameinfo");
+    if (win_getnameinfo)
+        return win_getnameinfo(sa, salen, host, hostlen, serv, servlen, flags);
+#endif
+
     if (sa->sa_family != AF_INET)
         return EAI_FAMILY;
     if (!host && !serv)