Blob Blame History Raw
 lib/multi.c |   17 ++++++++++++++++-
 1 files changed, 16 insertions(+), 1 deletions(-)

diff --git a/lib/multi.c b/lib/multi.c
index 476cb81..74eb0f4 100644
--- a/lib/multi.c
+++ b/lib/multi.c
@@ -933,9 +933,16 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
         easy->result = addHandleToSendOrPendPipeline(easy->easy_handle,
                                                      easy->easy_conn);
         if(CURLE_OK == easy->result) {
-          if(async)
+          if(async) {
             /* We're now waiting for an asynchronous name lookup */
             multistate(easy, CURLM_STATE_WAITRESOLVE);
+#ifdef USE_THREADS_POSIX
+            /* Curl_resolv_getsock() is not properly implemented in case
+             * we use POSIX threaded DNS resolver, we have to hang */
+            result = CURLM_CALL_MULTI_PERFORM;
+            break;
+#endif
+          }
           else {
             /* after the connect has been sent off, go WAITCONNECT unless the
                protocol connect is already done and we can go directly to
@@ -1003,6 +1010,14 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
         disconnect_conn = TRUE;
         break;
       }
+#ifdef USE_THREADS_POSIX
+      /* Curl_resolv_getsock() is not properly implemented yet in case
+       * we use POSIX threaded DNS resolver, we have to hang */
+      Curl_socket_ready(CURL_SOCKET_BAD, CURL_SOCKET_BAD, 100 /* ms */);
+      result = CURLM_CALL_MULTI_PERFORM;
+      break;
+#endif
+
     }
     break;