Loading lib/sendf.c +1 −0 Original line number Diff line number Diff line Loading @@ -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 Loading lib/setup.h +10 −0 Original line number Diff line number Diff line Loading @@ -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 */ lib/transfer.c +20 −6 Original line number Diff line number Diff line Loading @@ -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) 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 Loading lib/urldata.h +2 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
lib/sendf.c +1 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
lib/setup.h +10 −0 Original line number Diff line number Diff line Loading @@ -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 */
lib/transfer.c +20 −6 Original line number Diff line number Diff line Loading @@ -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) 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 Loading
lib/urldata.h +2 −0 Original line number Diff line number Diff line Loading @@ -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