diff -du -r orig/curl-7.17.1/lib/gtls.c curl-7.17.1/lib/gtls.c
--- orig/curl-7.17.1/lib/gtls.c	2007-10-03 01:07:50.000000000 -0700
+++ curl-7.17.1/lib/gtls.c	2008-01-24 16:24:36.359375000 -0800
@@ -524,6 +524,7 @@
       return Curl_ssl_addsessionid(conn, ssl_sessionid, ssl_idsize);
     }
   }
+  connssl->connection_status = ssl_connection_complete;
 
   return CURLE_OK;
 }
diff -du -r orig/curl-7.17.1/lib/nss.c curl-7.17.1/lib/nss.c
--- orig/curl-7.17.1/lib/nss.c	2007-10-25 14:14:52.000000000 -0700
+++ curl-7.17.1/lib/nss.c	2008-01-24 16:24:36.171875000 -0800
@@ -1019,6 +1019,8 @@
     goto error;
   }
 
+  connssl->connection_status = ssl_connection_complete;
+
   display_conn_info(conn, connssl->handle);
 
   return CURLE_OK;
diff -du -r orig/curl-7.17.1/lib/qssl.c curl-7.17.1/lib/qssl.c
--- orig/curl-7.17.1/lib/qssl.c	2007-10-03 01:07:50.000000000 -0700
+++ curl-7.17.1/lib/qssl.c	2008-01-24 16:26:11.656250000 -0800
@@ -262,8 +262,12 @@
       SSL_Destroy(connssl->handle);
       connssl->handle = NULL;
       connssl->use = FALSE;
+      connssl->connection_status = ssl_connection_none;
     }
   }
+  if (rc == CURLRE_OK) {
+      connssl->connection_status = ssl_connection_complete;
+  }
 
   return rc;
 }
diff -du -r orig/curl-7.17.1/lib/sslgen.c curl-7.17.1/lib/sslgen.c
--- orig/curl-7.17.1/lib/sslgen.c	2007-09-26 05:51:05.000000000 -0700
+++ curl-7.17.1/lib/sslgen.c	2008-01-24 16:25:53.062500000 -0800
@@ -206,6 +206,7 @@
 #ifdef USE_SSL
   /* mark this is being ssl enabled from here on. */
   conn->ssl[sockindex].use = TRUE;
+  conn->ssl[sockindex].connection_status = ssl_connection_negotiating;
 
 #ifdef USE_SSLEAY
   return Curl_ossl_connect(conn, sockindex);
@@ -466,6 +467,7 @@
 #endif /* USE_SSLEAY */
 
   conn->ssl[sockindex].use = FALSE; /* get back to ordinary socket usage */
+  conn->ssl[sockindex].connection_status = ssl_connection_none;
 
   return CURLE_OK;
 }
diff -du -r orig/curl-7.17.1/lib/ssluse.c curl-7.17.1/lib/ssluse.c
--- orig/curl-7.17.1/lib/ssluse.c	2007-10-03 01:07:50.000000000 -0700
+++ curl-7.17.1/lib/ssluse.c	2008-01-24 16:24:36.078125000 -0800
@@ -1763,6 +1763,7 @@
   }
 
   if (ssl_connect_done==connssl->connecting_state) {
+    connssl->connection_status = ssl_connection_complete;
     *done = TRUE;
   }
   else {
diff -du -r orig/curl-7.17.1/lib/url.c curl-7.17.1/lib/url.c
--- orig/curl-7.17.1/lib/url.c	2007-10-26 15:25:19.000000000 -0700
+++ curl-7.17.1/lib/url.c	2008-01-24 16:24:36.265625000 -0800
@@ -2423,6 +2423,14 @@
                   "can't reuse\n",
                   check->connectindex );
             continue;
+          } else {
+              if(check->ssl[FIRSTSOCKET].connection_status != ssl_connection_complete) {
+                 infof(data,
+                       "Connection #%ld has not started ssl connect, "
+                       "can't reuse\n",
+                       check->connectindex );
+                 continue;
+              }
           }
         }
         if((needle->protocol & PROT_FTP) ||
diff -du -r orig/curl-7.17.1/lib/urldata.h curl-7.17.1/lib/urldata.h
--- orig/curl-7.17.1/lib/urldata.h	2007-10-24 14:09:59.000000000 -0700
+++ curl-7.17.1/lib/urldata.h	2008-01-24 16:26:31.609375000 -0800
@@ -165,11 +165,18 @@
   ssl_connect_done
 } ssl_connect_state;
 
+typedef enum {
+    ssl_connection_none,
+    ssl_connection_negotiating,
+    ssl_connection_complete
+} ssl_connection_state;
+
 /* struct for data related to each SSL connection */
 struct ssl_connect_data {
   bool use;        /* use ssl encrypted communications TRUE/FALSE, not
                       necessarily using it atm but at least asked to or
                       meaning to use it */
+  ssl_connection_state connection_status;
 #ifdef USE_SSLEAY
   /* these ones requires specific SSL-types */
   SSL_CTX* ctx;
