patch [ 756021 ] Allow socket.inet_aton("255.255.255.255") on Windows
diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
index 31ac892..1899e78 100644
--- a/Lib/test/test_socket.py
+++ b/Lib/test/test_socket.py
@@ -380,10 +380,12 @@
         self.assertEquals('\xff\x00\xff\x00', f('255.0.255.0'))
         self.assertEquals('\xaa\xaa\xaa\xaa', f('170.170.170.170'))
         self.assertEquals('\x01\x02\x03\x04', f('1.2.3.4'))
+        self.assertEquals('\xff\xff\xff\xff', f('255.255.255.255'))
 
         self.assertEquals('\x00\x00\x00\x00', g('0.0.0.0'))
         self.assertEquals('\xff\x00\xff\x00', g('255.0.255.0'))
         self.assertEquals('\xaa\xaa\xaa\xaa', g('170.170.170.170'))
+        self.assertEquals('\xff\xff\xff\xff', g('255.255.255.255'))
 
     def testIPv6toString(self):
         if not hasattr(socket, 'inet_pton'):
diff --git a/Misc/NEWS b/Misc/NEWS
index 0bb698b..5bf94c0 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -133,9 +133,12 @@
 Extension Modules
 -----------------
 
-- Bug #1191043: Fix bz2.BZ2File.seek() for 64-bit file offsets.
+- Patch #756021: Special-case socket.inet_aton('255.255.255.255') for
+  platforms that don't have inet_aton().
 
-- Bug #1215928: Fix bz2.BZ2File.(x)readlines for files containing one
+- Bug #1215928: Fix bz2.BZ2File.seek() for 64-bit file offsets.
+
+- Bug #1191043: Fix bz2.BZ2File.(x)readlines for files containing one
   line without newlines.
 
 - Bug #728515: mmap.resize() now resizes the file on Unix as it did
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index 3c17e9c..059153d 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -3238,14 +3238,19 @@
 	return NULL;
 
 #else /* ! HAVE_INET_ATON */
-	/* XXX Problem here: inet_aton('255.255.255.255') raises
-	   an exception while it should be a valid address. */
-	packed_addr = inet_addr(ip_addr);
+	/* special-case this address as inet_addr might return INADDR_NONE
+	 * for this */
+	if (strcmp(ip_addr, "255.255.255.255") == 0) {
+		packed_addr = 0xFFFFFFFF;
+	} else {
+	
+		packed_addr = inet_addr(ip_addr);
 
-	if (packed_addr == INADDR_NONE) {	/* invalid address */
-		PyErr_SetString(socket_error,
-			"illegal IP address string passed to inet_aton");
-		return NULL;
+		if (packed_addr == INADDR_NONE) {	/* invalid address */
+			PyErr_SetString(socket_error,
+				"illegal IP address string passed to inet_aton");
+			return NULL;
+		}
 	}
 	return PyString_FromStringAndSize((char *) &packed_addr,
 					  sizeof(packed_addr));