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 Diff line number Diff line
@@ -7,6 +7,8 @@
                                  Changelog

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

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

This release includes the following known bugs:

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

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

@@ -117,10 +118,10 @@ int Curl_resolv_getsock(struct connectdata *conn,
  maxtime.tv_sec = CURL_TIMEOUT_RESOLVE;
  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,
              (timeout.tv_sec * 1000) + (timeout.tv_usec/1000) );
              (timeout->tv_sec * 1000) + (timeout->tv_usec/1000));

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

    /* 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)
      break;