Emulate inet_{pton,ntop} on systems that don't provide it.
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index c3f03b1..507e6aa 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -208,6 +208,11 @@
    in those files, though, which will never compile on Windows. */
 #ifndef MS_WINDOWS
 
+#ifndef HAVE_INET_PTON
+int inet_pton (int af, const char *src, void *dst);
+char *inet_ntop(int af, void *src, char *dst, socklen_t size);
+#endif
+
 /* I know this is a bad practice, but it is the easiest... */
 #ifndef HAVE_GETADDRINFO
 #include "getaddrinfo.c"
@@ -2943,3 +2948,39 @@
 	gethostbyname_lock = PyThread_allocate_lock();
 #endif
 }
+
+/* Simplistic emulation code for inet_pton that only works for IPv4 */
+#ifndef HAVE_INET_PTON
+int my_inet_pton (int af, char *src, void *dst)
+{
+	if(af == AF_INET){
+		long packed_addr;
+#ifdef USE_GUSI1
+		packed_addr = (long)inet_addr(src).s_addr;
+#else
+		packed_addr = inet_addr(src);
+#endif
+		if (packed_addr == INADDR_NONE)
+			return 0;
+		memcpy(dst, &packed_addr, 4);
+		return 1;
+	}
+	/* Should set errno to EAFNOSUPPORT */
+	return -1;
+}
+
+char *
+my_inet_ntop(int af, void *src, char *dst, socklen_t size)
+{
+	if (af == AF_INET) {
+		struct in_addr packed_addr;
+		if (size < 16)
+			/* Should set errno to ENOSPC. */
+			return NULL;
+		memcpy(&packed_addr, src, sizeof(packed_addr));
+		return strncpy(dst, inet_ntoa(packed_addr), size);
+	}
+	/* Should set errno to EAFNOSUPPORT */
+	return NULL;
+}
+#endif