summaryrefslogtreecommitdiffstats
path: root/apps/lib
diff options
context:
space:
mode:
authorDmitry Belyavskiy <beldmit@gmail.com>2020-05-05 15:26:32 +0300
committerDmitry Belyavskiy <beldmit@gmail.com>2020-05-06 17:53:17 +0300
commitedbb56ee4fafc07eb77747ad25278a04b89adc09 (patch)
treef97db0243c7d4e30f15c4facb546b48bf9bcc44d /apps/lib
parenta96e6c347bc1da9964ffe941608b11cf030320ef (diff)
s_server normal shutdown
Partially fixes #11209 Reviewed-by: Matt Caswell <matt@openssl.org> (Merged from https://github.com/openssl/openssl/pull/11734)
Diffstat (limited to 'apps/lib')
-rw-r--r--apps/lib/s_socket.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/apps/lib/s_socket.c b/apps/lib/s_socket.c
index 7dd95e9f0e..52c4a0a764 100644
--- a/apps/lib/s_socket.c
+++ b/apps/lib/s_socket.c
@@ -392,4 +392,25 @@ int do_server(int *accept_sock, const char *host, const char *port,
return ret;
}
+void do_ssl_shutdown(SSL *ssl)
+{
+ int ret;
+
+ do {
+ /* We only do unidirectional shutdown */
+ ret = SSL_shutdown(ssl);
+ if (ret < 0) {
+ switch (SSL_get_error(ssl, ret)) {
+ case SSL_ERROR_WANT_READ:
+ case SSL_ERROR_WANT_WRITE:
+ case SSL_ERROR_WANT_ASYNC:
+ case SSL_ERROR_WANT_ASYNC_JOB:
+ /* We just do busy waiting. Nothing clever */
+ continue;
+ }
+ ret = 0;
+ }
+ } while (ret < 0);
+}
+
#endif /* OPENSSL_NO_SOCK */