]> granicus.if.org Git - python/commitdiff
internal_connect(): Windows. When sock_timeout > 0 and connect() yields
authorTim Peters <tim.peters@gmail.com>
Tue, 6 Aug 2002 22:25:02 +0000 (22:25 +0000)
committerTim Peters <tim.peters@gmail.com>
Tue, 6 Aug 2002 22:25:02 +0000 (22:25 +0000)
WSAEWOULDBLOCK, the second connect() attempt appears to yield WSAEISCONN
on Win98 but WSAEINVAL on Win2K.  So accept either as meaning "yawn,
fine".  This allows test_socket to succeed on my Win2K box (which it
already did on my Win98SE box).

Modules/socketmodule.c

index b9358b75108f61ef6e07820fda5e04271a7068d2..a540a2a40399a98580a0be8ab5409d444e2874e6 100644 (file)
@@ -1305,8 +1305,16 @@ internal_connect(PySocketSockObject *s, struct sockaddr *addr, int addrlen)
                if (res < 0 && WSAGetLastError() == WSAEWOULDBLOCK) {
                        internal_select(s, 1);
                        res = connect(s->sock_fd, addr, addrlen);
-                       if (res < 0 && WSAGetLastError() == WSAEISCONN)
-                               res = 0;
+                       if (res < 0) {
+                               /* On Win98, WSAEISCONN was seen here.  But
+                                * on Win2K, WSAEINVAL.  So accept both as
+                                * meaning "fine".
+                                */
+                               int code = WSAGetLastError();
+                               if (code == WSAEISCONN ||
+                                   code == WSAEINVAL)
+                                       res = 0;
+                       }
                }
        }
 
@@ -2495,11 +2503,11 @@ socket_ntohl(PyObject *self, PyObject *arg)
                                return PyErr_Format(PyExc_OverflowError,
                                            "long int larger than 32 bits");
                        x = y;
-               }                       
+               }
 #endif
        }
        else
-               return PyErr_Format(PyExc_TypeError, 
+               return PyErr_Format(PyExc_TypeError,
                                    "expected int/long, %s found",
                                    arg->ob_type->tp_name);
        if (x == (unsigned long) -1 && PyErr_Occurred())
@@ -2554,11 +2562,11 @@ socket_htonl(PyObject *self, PyObject *arg)
                                return PyErr_Format(PyExc_OverflowError,
                                            "long int larger than 32 bits");
                        x = y;
-               }                       
+               }
 #endif
        }
        else
-               return PyErr_Format(PyExc_TypeError, 
+               return PyErr_Format(PyExc_TypeError,
                                    "expected int/long, %s found",
                                    arg->ob_type->tp_name);
        return PyInt_FromLong(htonl(x));