Commit 3f3a38f9 authored by Yang Tse's avatar Yang Tse
Browse files

Fix issue related with the use of ares_timeout() result.

parent 4bf28cb9
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -7,6 +7,8 @@
                                  Changelog
                                  Changelog


Daniel S (3 October 2007)
Daniel S (3 October 2007)
- Yang Tse, fix issue related with the use of ares_timeout() result.

- Alexey Pesternikov introduced CURLOPT_OPENSOCKETFUNCTION and
- Alexey Pesternikov introduced CURLOPT_OPENSOCKETFUNCTION and
  CURLOPT_OPENSOCKETDATA to set a callback that allows an application to
  CURLOPT_OPENSOCKETDATA to set a callback that allows an application to
  replace the socket() call used by libcurl. It basically allows the app to
  replace the socket() call used by libcurl. It basically allows the app to
+1 −0
Original line number Original line Diff line number Diff line
@@ -33,6 +33,7 @@ This release includes the following bugfixes:
 o re-used handle transfers with SFTP
 o re-used handle transfers with SFTP
 o curl_easy_escape() problem with byte values >= 128
 o curl_easy_escape() problem with byte values >= 128
 o handles chunked-encoded CONNECT responses
 o handles chunked-encoded CONNECT responses
 o misuse of ares_timeout() result


This release includes the following known bugs:
This release includes the following known bugs:


+5 −4
Original line number Original line Diff line number Diff line
@@ -109,7 +109,8 @@ int Curl_resolv_getsock(struct connectdata *conn,


{
{
  struct timeval maxtime;
  struct timeval maxtime;
  struct timeval timeout;
  struct timeval timebuf;
  struct timeval *timeout;
  int max = ares_getsock(conn->data->state.areschannel,
  int max = ares_getsock(conn->data->state.areschannel,
                         (int *)socks, numsocks);
                         (int *)socks, numsocks);


@@ -117,10 +118,10 @@ int Curl_resolv_getsock(struct connectdata *conn,
  maxtime.tv_sec = CURL_TIMEOUT_RESOLVE;
  maxtime.tv_sec = CURL_TIMEOUT_RESOLVE;
  maxtime.tv_usec = 0;
  maxtime.tv_usec = 0;


  ares_timeout(conn->data->state.areschannel, &maxtime, &timeout);
  timeout = ares_timeout(conn->data->state.areschannel, &maxtime, &timebuf);


  Curl_expire(conn->data,
  Curl_expire(conn->data,
              (timeout.tv_sec * 1000) + (timeout.tv_usec/1000) );
              (timeout->tv_sec * 1000) + (timeout->tv_usec/1000));


  return max;
  return max;
}
}
@@ -254,7 +255,7 @@ CURLcode Curl_wait_for_resolv(struct connectdata *conn,
    tvp = ares_timeout(data->state.areschannel, &store, &tv);
    tvp = ares_timeout(data->state.areschannel, &store, &tv);


    /* use the timeout period ares returned to us above */
    /* use the timeout period ares returned to us above */
    ares_waitperform(conn, tv.tv_sec * 1000 + tv.tv_usec/1000);
    ares_waitperform(conn, tvp->tv_sec * 1000 + tvp->tv_usec/1000);


    if(conn->async.done)
    if(conn->async.done)
      break;
      break;