1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-21 23:58:49 -05:00

Fix the "lingering close" problem when re-using a connection, as test case

160 shows.

We got no data and we attempted to re-use a connection. This might happen if
the connection was left alive when we were done using it before, but that was
closed when we wanted to read from it again. Bad luck. Retry the same request
on a fresh connect!

Deleted the sockerror variable again, it serves no purpose anymore.
This commit is contained in:
Daniel Stenberg 2004-04-21 08:49:14 +00:00
parent 3233322622
commit 1401d909e8
3 changed files with 7 additions and 13 deletions

View File

@ -417,7 +417,6 @@ int Curl_read(struct connectdata *conn, /* connection data */
if(-1 == nread) {
int err = Curl_ourerrno();
conn->sockerror = err;
#ifdef WIN32
if(WSAEWOULDBLOCK == err)
#else
@ -425,8 +424,6 @@ int Curl_read(struct connectdata *conn, /* connection data */
#endif
return -1;
}
else
conn->sockerror = 0; /* no error */
#ifdef USE_SSLEAY
}

View File

@ -1946,15 +1946,14 @@ CURLcode Curl_perform(struct SessionHandle *data)
res = Transfer(conn); /* now fetch that URL please */
if(res == CURLE_OK) {
if((conn->keep.bytecount == 0) &&
(conn->sockerror == ECONNRESET) &&
if((conn->keep.bytecount+conn->headerbytecount == 0) &&
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");
/* We got no data and we attempted to re-use a connection. This
might happen if the connection was left alive when we were done
using it before, but that was closed when we wanted to read
from it again. Bad luck. Retry the same request on a fresh
connect! */
infof(data, "Connection died, retrying a fresh connect\n");
newurl = strdup(conn->data->change.url);
conn->bits.close = TRUE; /* close this connection */

View File

@ -577,8 +577,6 @@ struct connectdata {
single requests! */
struct ntlmdata proxyntlm; /* NTLM data for proxy */
int sockerror; /* errno stored by Curl_read() if the underlying layer returns
error */
char syserr_buf [256]; /* buffer for Curl_strerror() */
#if defined(USE_ARES) || defined(USE_THREADING_GETHOSTBYNAME)