diff --git a/lib/multi.c b/lib/multi.c
index 21ed99c7433eb92365432770158dff1790943d8b..f97345a6fd4a67f3a4b4fe9f306f5393c1455439 100644
--- a/lib/multi.c
+++ b/lib/multi.c
@@ -339,9 +339,12 @@ CURLMcode curl_multi_perform(CURLM *multi_handle, int *running_handles)
         if(connected)
           easy->result = Curl_protocol_connect(easy->easy_conn, NULL);
 
-        if(CURLE_OK != easy->result)
+        if(CURLE_OK != easy->result) {
           /* failure detected */
+          Curl_disconnect(easy->easy_conn); /* close the connection */
+          easy->easy_conn = NULL;           /* no more connection */
           break;
+        }
 
         if(connected) {
           /* after the connect has completed, go DO */