Commit df750c23 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

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.
parent 154c9bc3
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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 −0
Original line number Diff line number Diff line
@@ -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 */
+20 −6
Original line number Diff line number Diff line
@@ -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
+2 −0
Original line number Diff line number Diff line
@@ -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;