summaryrefslogtreecommitdiffstats
path: root/apps/apps.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/apps.c')
-rw-r--r--apps/apps.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/apps/apps.c b/apps/apps.c
index 5ad090a44c..9f60e76dd8 100644
--- a/apps/apps.c
+++ b/apps/apps.c
@@ -2638,15 +2638,27 @@ BIO *bio_open_default_quiet(const char *filename, char mode, int format)
void wait_for_async(SSL *s)
{
- int width, fd;
+ int width = 0;
fd_set asyncfds;
+ OSSL_ASYNC_FD *fds;
+ size_t numfds;
- fd = SSL_get_async_wait_fd(s);
- if (fd < 0)
+ if (!SSL_get_all_async_fds(s, NULL, &numfds))
+ return;
+ if (numfds == 0)
return;
+ fds = OPENSSL_malloc(sizeof(OSSL_ASYNC_FD) * numfds);
+ if (!SSL_get_all_async_fds(s, fds, &numfds)) {
+ OPENSSL_free(fds);
+ }
- width = fd + 1;
FD_ZERO(&asyncfds);
- openssl_fdset(fd, &asyncfds);
+ while (numfds > 0) {
+ if (width <= (int)*fds)
+ width = (int)*fds + 1;
+ openssl_fdset((int)*fds, &asyncfds);
+ numfds--;
+ fds++;
+ }
select(width, (void *)&asyncfds, NULL, NULL, NULL);
}