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:
parent
154c9bc3b8
commit
df750c236c
@ -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
|
||||
|
10
lib/setup.h
10
lib/setup.h
@ -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 */
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user