Fix s_server -WWW with -async
authorMatt Caswell <matt@openssl.org>
Fri, 27 Mar 2015 15:20:24 +0000 (15:20 +0000)
committerMatt Caswell <matt@openssl.org>
Fri, 20 Nov 2015 23:32:18 +0000 (23:32 +0000)
The s_server option -WWW was not async aware, and therefore was not
handling SSL_ERROR_WANT_ASYNC conditions. This commit fixes that.

Reviewed-by: Rich Salz <rsalz@openssl.org>
apps/s_server.c

index da093523c5d80a215595055948889ac057f06d69..548eacbbce2085d18e5a1fcbbf3a106433193682 100644 (file)
@@ -2662,7 +2662,7 @@ static int www_body(char *hostname, int s, int stype, unsigned char *context)
     for (;;) {
         i = BIO_gets(io, buf, bufsize - 1);
         if (i < 0) {            /* error */
-            if (!BIO_should_retry(io)) {
+            if (!BIO_should_retry(io) && !SSL_waiting_for_async(con)) {
                 if (!s_quiet)
                     ERR_print_errors(bio_err);
                 goto err;
@@ -2929,7 +2929,7 @@ static int www_body(char *hostname, int s, int stype, unsigned char *context)
 #endif
                     k = BIO_write(io, &(buf[j]), i - j);
                     if (k <= 0) {
-                        if (!BIO_should_retry(io))
+                        if (!BIO_should_retry(io)  && !SSL_waiting_for_async(con))
                             goto write_error;
                         else {
                             BIO_printf(bio_s_out, "rwrite W BLOCK\n");