]> sjero.net Git - wget/commitdiff
openssl: Retry to read if a non-blocking socket returns immediately.
authorGiuseppe Scrivano <gscrivano@gnu.org>
Mon, 4 Apr 2011 14:56:51 +0000 (16:56 +0200)
committerGiuseppe Scrivano <gscrivano@gnu.org>
Mon, 4 Apr 2011 14:56:51 +0000 (16:56 +0200)
src/ChangeLog
src/openssl.c

index 4c6ab208824ce3e9d2191f7b9b10dff6f0801620..001b62e2f1edfaa536bc0a96f4adf9dea4121d10 100644 (file)
@@ -1,6 +1,7 @@
 2011-04-04  Giuseppe Scrivano  <gscrivano@gnu.org>
 
        * openssl.c [WINDOWS]: Include <w32sock.h>.
+       (openssl_read): Retry the read on SSL_ERROR_WANT_READ.
 
        * host.c [WINDOWS]: Include <winsock2.h> and <ws2tcpip.h>.
        Suggested by: Ray Satiro <raysatiro@yahoo.com>.
index 60e794f6dbcb4bbc112f45bccb8989c15c1916db..201d24597995bbba66460fe709dcbb5f281dc9c3 100644 (file)
@@ -261,8 +261,10 @@ openssl_read (int fd, char *buf, int bufsize, void *arg)
   do
     ret = SSL_read (conn, buf, bufsize);
   while (ret == -1
-         && SSL_get_error (conn, ret) == SSL_ERROR_SYSCALL
-         && errno == EINTR);
+         && (SSL_get_error (conn, ret) == SSL_ERROR_WANT_READ
+             || (SSL_get_error (conn, ret) == SSL_ERROR_SYSCALL
+                 && errno == EINTR)));
+
   return ret;
 }