Somewhat crude attempt at fixing the test 91 failures. I commit this now

so that the automatic testing hosts will test these changes over the weekend.
This commit is contained in:
Daniel Stenberg 2004-01-30 12:08:18 +00:00
parent 154c9bc3b8
commit df750c236c
4 changed files with 33 additions and 6 deletions

View File

@ -420,6 +420,7 @@ int Curl_read(struct connectdata *conn,
if(-1 == nread) {
int err = Curl_ourerrno();
conn->sockerror = err;
#ifdef WIN32
if(WSAEWOULDBLOCK == err)
#else

View File

@ -256,4 +256,14 @@ typedef struct in_addr Curl_ipconnect;
#define IOCTL_3_ARGS
#endif
#ifndef ECONNRESET
#ifdef WSAECONNRESET
#define ECONNRESET WSAECONNRESET
#else
/* This will effectively prevent the code from working in this particular
aspect, but it still compile fine! */
#define ECONNRESET 10000
#endif
#endif
#endif /* __CONFIG_H */

View File

@ -1896,12 +1896,26 @@ CURLcode Curl_perform(struct SessionHandle *data)
if(res == CURLE_OK) {
res = Transfer(conn); /* now fetch that URL please */
if(res == CURLE_OK)
/*
* We must duplicate the new URL here as the connection data
* may be free()ed in the Curl_done() function.
*/
newurl = conn->newurl?strdup(conn->newurl):NULL;
if(res == CURLE_OK) {
if((conn->keep.bytecount == 0) &&
(conn->sockerror == ECONNRESET) &&
conn->bits.reuse) {
/* We got no data, the connection was reset and we did attempt
to re-use a connection. This smells like we were too fast to
re-use a connection that was closed when we wanted to read
from it. Bad luck. Let's simulate a redirect to the same URL
to retry! */
infof(data, "Connection reset, retrying a fresh connect\n");
newurl = strdup(conn->data->change.url);
}
else
/*
* We must duplicate the new URL here as the connection data
* may be free()ed in the Curl_done() function.
*/
newurl = conn->newurl?strdup(conn->newurl):NULL;
}
else {
/* The transfer phase returned error, we mark the connection to get
* closed to prevent being re-used. This is becasue we can't

View File

@ -563,6 +563,8 @@ struct connectdata {
single requests! */
struct ntlmdata proxyntlm; /* NTLM data for proxy */
int sockerror; /* errno stored by Curl_read() if the underlying layer returns
error */
#ifdef USE_ARES
/* data used for the asynch name resolve callback */
struct Curl_async async;