]> granicus.if.org Git - python/commitdiff
Addressing SF bug #643005, implement socket.inet_aton() using
authorGuido van Rossum <guido@python.org>
Wed, 12 Feb 2003 23:08:22 +0000 (23:08 +0000)
committerGuido van Rossum <guido@python.org>
Wed, 12 Feb 2003 23:08:22 +0000 (23:08 +0000)
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.)

Modules/socketmodule.c

index 63ad50add529e1b9f18365332277eff95705d811..26e5e01be3a3840fbb4db74596501b2a61e99e94 100644 (file)
@@ -2713,11 +2713,26 @@ socket_inet_aton(PyObject *self, PyObject *args)
 
        /* 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 @@ socket_inet_aton(PyObject *self, PyObject *args)
 
        return PyString_FromStringAndSize((char *) &packed_addr,
                                          sizeof(packed_addr));
+#endif
 }
 
 PyDoc_STRVAR(inet_ntoa_doc,