]> granicus.if.org Git - curl/commitdiff
- Improved Curl_read() to not ignore the error returned from Curl_ssl_recv().
authorKamil Dudka <kdudka@redhat.com>
Fri, 19 Mar 2010 15:43:11 +0000 (15:43 +0000)
committerKamil Dudka <kdudka@redhat.com>
Fri, 19 Mar 2010 15:43:11 +0000 (15:43 +0000)
CHANGES
lib/sendf.c
lib/sslgen.c

diff --git a/CHANGES b/CHANGES
index 4075b8843a3527c7401ffa67a2de303534ec9d33..2f0caed2314029f5a1f1a9ccc0964aa010d1e596 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -6,6 +6,9 @@
 
                                   Changelog
 
+Kamil Dudka (19 Mar 2010)
+- Improved Curl_read() to not ignore the error returned from Curl_ssl_recv().
+
 Daniel Stenberg (15 Mar 2010)
 - Constantine Sapuntzakis brought a patch:
 
index 0d6764cbfe55c4f705748b6e01bb753753c22733..79ffce7a4e6b4dd94e7f820400e6aa44fc8bdfb2 100644 (file)
@@ -538,9 +538,11 @@ int Curl_read(struct connectdata *conn, /* connection data */
   if(conn->ssl[num].state == ssl_connection_complete) {
     nread = Curl_ssl_recv(conn, num, buffertofill, bytesfromsocket);
 
-    if(nread == -1) {
+    if(nread == -1)
       return -1; /* -1 from Curl_ssl_recv() means EWOULDBLOCK */
-    }
+    else if(nread == -2)
+      /* -2 from Curl_ssl_recv() means a true error, not EWOULDBLOCK */
+      return CURLE_RECV_ERROR;
   }
   else if(Curl_ssh_enabled(conn, (PROT_SCP|PROT_SFTP))) {
     if(conn->protocol & PROT_SCP)
index 2271eb58941505d538027ba069e7aca59cf58cdb..6707e0af6493af46395a52262ec9376ac7d36e48 100644 (file)
@@ -399,7 +399,7 @@ struct curl_slist *Curl_ssl_engines_list(struct SessionHandle *data)
   return curlssl_engines_list(data);
 }
 
-/* return number of sent (non-SSL) bytes */
+/* return number of sent (non-SSL) bytes; -1 on error */
 ssize_t Curl_ssl_send(struct connectdata *conn,
                       int sockindex,
                       const void *mem,
@@ -411,8 +411,8 @@ ssize_t Curl_ssl_send(struct connectdata *conn,
 /* return number of received (decrypted) bytes */
 
 /*
- * If the read would block (EWOULDBLOCK) we return -1. Otherwise we return
- * a regular CURLcode value.
+ * If the read would block (EWOULDBLOCK) we return -1. If an error occurs during
+ * the read, we return -2. Otherwise we return the count of bytes transfered.
  */
 ssize_t Curl_ssl_recv(struct connectdata *conn, /* connection data */
                       int sockindex,            /* socketindex */
@@ -425,9 +425,9 @@ ssize_t Curl_ssl_recv(struct connectdata *conn, /* connection data */
   nread = curlssl_recv(conn, sockindex, mem, len, &block);
   if(nread == -1) {
     if(!block)
-      return 0; /* this is a true error, not EWOULDBLOCK */
+      return -2; /* this is a true error, not EWOULDBLOCK */
     else
-      return -1;
+      return -1; /* EWOULDBLOCK */
   }
 
   return nread;