diff Modules/socketmodule.c @ 27854:81afca747caa legacy-trunk

Addressing SF bug #643005, implement socket.inet_aton() using inet_aton() rather than inet_addr() -- the latter is obsolete because it has a problem: "255.255.255.255" is a valid address but indistinguishable from an error. (I'm not sure if inet_aton() exists everywhere -- in case it doesn't, I've left the old code in with an #ifdef.)
author Guido van Rossum <guido@python.org>
date Wed, 12 Feb 2003 23:08:22 +0000
parents 8d83578dba81
children a8780479d4e0
line wrap: on
line diff
--- a/Modules/socketmodule.c	Wed Feb 12 23:02:21 2003 +0000
+++ b/Modules/socketmodule.c	Wed Feb 12 23:08:22 2003 +0000
@@ -2713,11 +2713,26 @@
 
 	/* Have to use inet_addr() instead */
 	char *ip_addr;
-	unsigned long packed_addr;
+#if 1
+	struct in_addr buf;
 
 	if (!PyArg_ParseTuple(args, "s:inet_aton", &ip_addr)) {
 		return NULL;
 	}
+
+	if (inet_aton(ip_addr, &buf))
+		return PyString_FromStringAndSize((char *)(&buf),
+						  sizeof(buf));
+
+	PyErr_SetString(socket_error,
+			"illegal IP address string passed to inet_aton");
+	return NULL;
+
+#else /* In case you don't have inet_aton() */
+	/* XXX Problem here: inet_aton('255.255.255.255') raises
+	   an exception while it should be a valid address. */
+	unsigned long packed_addr;
+
 	packed_addr = inet_addr(ip_addr);
 
 	if (packed_addr == INADDR_NONE) {	/* invalid address */
@@ -2728,6 +2743,7 @@
 
 	return PyString_FromStringAndSize((char *) &packed_addr,
 					  sizeof(packed_addr));
+#endif
 }
 
 PyDoc_STRVAR(inet_ntoa_doc,