Commit 5814187f authored by Tim Peters's avatar Tim Peters

internal_connect(): Windows. When sock_timeout > 0 and connect() yields

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).
parent d37f75b8
...@@ -1305,8 +1305,16 @@ internal_connect(PySocketSockObject *s, struct sockaddr *addr, int addrlen) ...@@ -1305,8 +1305,16 @@ internal_connect(PySocketSockObject *s, struct sockaddr *addr, int addrlen)
if (res < 0 && WSAGetLastError() == WSAEWOULDBLOCK) { if (res < 0 && WSAGetLastError() == WSAEWOULDBLOCK) {
internal_select(s, 1); internal_select(s, 1);
res = connect(s->sock_fd, addr, addrlen); res = connect(s->sock_fd, addr, addrlen);
if (res < 0 && WSAGetLastError() == WSAEISCONN) if (res < 0) {
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) ...@@ -2495,11 +2503,11 @@ socket_ntohl(PyObject *self, PyObject *arg)
return PyErr_Format(PyExc_OverflowError, return PyErr_Format(PyExc_OverflowError,
"long int larger than 32 bits"); "long int larger than 32 bits");
x = y; x = y;
} }
#endif #endif
} }
else else
return PyErr_Format(PyExc_TypeError, return PyErr_Format(PyExc_TypeError,
"expected int/long, %s found", "expected int/long, %s found",
arg->ob_type->tp_name); arg->ob_type->tp_name);
if (x == (unsigned long) -1 && PyErr_Occurred()) if (x == (unsigned long) -1 && PyErr_Occurred())
...@@ -2554,11 +2562,11 @@ socket_htonl(PyObject *self, PyObject *arg) ...@@ -2554,11 +2562,11 @@ socket_htonl(PyObject *self, PyObject *arg)
return PyErr_Format(PyExc_OverflowError, return PyErr_Format(PyExc_OverflowError,
"long int larger than 32 bits"); "long int larger than 32 bits");
x = y; x = y;
} }
#endif #endif
} }
else else
return PyErr_Format(PyExc_TypeError, return PyErr_Format(PyExc_TypeError,
"expected int/long, %s found", "expected int/long, %s found",
arg->ob_type->tp_name); arg->ob_type->tp_name);
return PyInt_FromLong(htonl(x)); return PyInt_FromLong(htonl(x));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment