diff options
author | Roelof duToit <r@dutoit.za.net> | 2017-07-13 13:07:26 -0400 |
---|---|---|
committer | Matt Caswell <matt@openssl.org> | 2017-07-14 11:19:07 +0100 |
commit | a071d72b82edacf562cff7197ea4a46faffad9e7 (patch) | |
tree | 934e0dae580ad78fc8bcd6d9329a4048cb867036 | |
parent | 96c9aee2a835e5a0833223d6d6458a3d45457913 (diff) |
Retry SSL_read on ERROR_WANT_READ.
This resolves the retry issue in general, but also the specific case where a TLS 1.3 server sends a post-handshake NewSessionTicket message prior to appdata.
Reviewed-by: Tim Hudson <tjh@openssl.org>
Reviewed-by: Bernd Edlinger <bernd.edlinger@hotmail.de>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/3925)
-rw-r--r-- | apps/s_time.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/apps/s_time.c b/apps/s_time.c index 998ef72b88..a7a25229a9 100644 --- a/apps/s_time.c +++ b/apps/s_time.c @@ -234,8 +234,8 @@ int s_time_main(int argc, char **argv) fmt_http_get_cmd, www_path); if (SSL_write(scon, buf, buf_len) <= 0) goto end; - while ((i = SSL_read(scon, buf, sizeof(buf))) > 0) - bytes_read += i; + while ((i = SSL_read(scon, buf, sizeof(buf))) > 0 || SSL_get_error(scon, i) == SSL_ERROR_WANT_READ) + if (i > 0) bytes_read += i; } #ifdef NO_SHUTDOWN SSL_set_shutdown(scon, SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN); @@ -292,7 +292,7 @@ int s_time_main(int argc, char **argv) fmt_http_get_cmd, www_path); if (SSL_write(scon, buf, buf_len) <= 0) goto end; - while (SSL_read(scon, buf, sizeof(buf)) > 0) + while ((i = SSL_read(scon, buf, sizeof(buf))) > 0 || SSL_get_error(scon, i) == SSL_ERROR_WANT_READ) continue; } #ifdef NO_SHUTDOWN @@ -323,8 +323,8 @@ int s_time_main(int argc, char **argv) www_path); if (SSL_write(scon, buf, strlen(buf)) <= 0) goto end; - while ((i = SSL_read(scon, buf, sizeof(buf))) > 0) - bytes_read += i; + while ((i = SSL_read(scon, buf, sizeof(buf))) > 0 || SSL_get_error(scon, i) == SSL_ERROR_WANT_READ) + if (i > 0) bytes_read += i; } #ifdef NO_SHUTDOWN SSL_set_shutdown(scon, SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN); |