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)
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));
......
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