diff --git a/libavformat/network.h b/libavformat/network.h
index 6e82f81ca837f44007e48c5297056f45c966df81..796d44ae5f19b56ed3b8a5e235326805b93b54f9 100644
--- a/libavformat/network.h
+++ b/libavformat/network.h
@@ -147,9 +147,11 @@ void ff_freeaddrinfo(struct addrinfo *res);
 int ff_getnameinfo(const struct sockaddr *sa, int salen,
                    char *host, int hostlen,
                    char *serv, int servlen, int flags);
+const char *ff_gai_strerror(int ecode);
 #define getaddrinfo ff_getaddrinfo
 #define freeaddrinfo ff_freeaddrinfo
 #define getnameinfo ff_getnameinfo
+#define gai_strerror ff_gai_strerror
 #endif
 
 #endif /* AVFORMAT_NETWORK_H */
diff --git a/libavformat/os_support.c b/libavformat/os_support.c
index 58215ec19865cc52463d8db4cf91093f199f2d50..fd6af3368a4e0d6850fde4a356a2bdacac7dcf79 100644
--- a/libavformat/os_support.c
+++ b/libavformat/os_support.c
@@ -203,6 +203,17 @@ int ff_getnameinfo(const struct sockaddr *sa, int salen,
 
     return 0;
 }
+
+const char *ff_gai_strerror(int ecode)
+{
+    switch(ecode) {
+    case EAI_FAIL   : return "A non-recoverable error occurred";
+    case EAI_FAMILY : return "The address family was not recognized or the address length was invalid for the specified family";
+    case EAI_NONAME : return "The name does not resolve for the supplied parameters";
+    }
+
+    return "Unknown error";
+}
 #endif
 
 /* resolve host with also IP address parsing */