Skip to content
Snippets Groups Projects
Commit eecb86bf authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

this seems to correct the SSL reading problem introduced when switching

over to non-blocking sockets, but this loops very nastily. We should return
back to the select() and wait there until more data arrives, not just blindly
attempt again and again...
parent 0b119793
No related branches found
No related tags found
No related merge requests found
......@@ -279,13 +279,28 @@ CURLcode Curl_read(struct connectdata *conn, int sockfd,
#ifdef USE_SSLEAY
if (conn->ssl.use) {
int loop=100; /* just a precaution to never loop endlessly */
while(loop--) {
bool loop=TRUE;
int err;
do {
nread = SSL_read(conn->ssl.handle, buf, buffersize);
if((-1 != nread) ||
(SSL_ERROR_WANT_READ != SSL_get_error(conn->ssl.handle, nread) ))
if(nread > 0)
/* successful read */
break;
}
err = SSL_get_error(conn->ssl.handle, nread);
switch(err) {
case SSL_ERROR_NONE: /* this is not an error */
case SSL_ERROR_ZERO_RETURN: /* no more data */
loop=0; /* get out of loop */
break;
case SSL_ERROR_WANT_READ:
case SSL_ERROR_WANT_WRITE:
/* if there's data pending, then we re-invoke SSL_read() */
break;
}
} while(loop && SSL_pending(conn->ssl.handle));
}
else {
#endif
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment