diff --git a/apps/apps.c b/apps/apps.c index 89f43406bf346fa38d1bf0a2a2cc40772743e0b4..c6b70d63a870b5da7b902df5a01be5edc4926e47 100644 --- a/apps/apps.c +++ b/apps/apps.c @@ -2884,3 +2884,17 @@ BIO *bio_open_default_quiet(const char *filename, char mode, int format) return bio_open_default_(filename, mode, format, 1); } +void wait_for_async(SSL *s) +{ + int width, fd; + fd_set asyncfds; + + fd = SSL_get_async_wait_fd(s); + if (fd < 0) + return; + + width = fd + 1; + FD_ZERO(&asyncfds); + openssl_fdset(fd, &asyncfds); + select(width, (void *)&asyncfds, NULL, NULL, NULL); +} diff --git a/apps/apps.h b/apps/apps.h index 185ac2422e7c543d013700624c755cd23663d340..e25965891871ebdc622e8b521647077165205ed4 100644 --- a/apps/apps.h +++ b/apps/apps.h @@ -162,6 +162,7 @@ CONF *app_load_config(const char *filename); CONF *app_load_config_quiet(const char *filename); int app_load_modules(const CONF *config); void unbuffer(FILE *fp); +void wait_for_async(SSL *s); /* * Common verification options. diff --git a/apps/s_client.c b/apps/s_client.c index 723e7cba3b88b9b518b074de1b4d01b17f3cdd90..4a93b3de540c69958e089e447739b60f5254be12 100644 --- a/apps/s_client.c +++ b/apps/s_client.c @@ -1897,6 +1897,7 @@ int s_client_main(int argc, char **argv) break; case SSL_ERROR_WANT_ASYNC: BIO_printf(bio_c_out, "write A BLOCK\n"); + wait_for_async(con); write_ssl = 1; read_tty = 0; break; @@ -1984,6 +1985,7 @@ int s_client_main(int argc, char **argv) break; case SSL_ERROR_WANT_ASYNC: BIO_printf(bio_c_out, "read A BLOCK\n"); + wait_for_async(con); write_tty = 0; read_ssl = 1; if ((read_tty == 0) && (write_ssl == 0)) diff --git a/apps/s_server.c b/apps/s_server.c index 8645c6c20326d4b3ef4c83dbab73cdadf343a032..c90b700af31af2728b5fabee2e860a1b2d9a3b5e 100644 --- a/apps/s_server.c +++ b/apps/s_server.c @@ -194,7 +194,6 @@ typedef unsigned int u_int; static RSA *tmp_rsa_cb(SSL *s, int is_export, int keylength); #endif static int not_resumable_sess_cb(SSL *s, int is_forward_secure); -static void wait_for_async(SSL *s); static int sv_body(char *hostname, int s, int stype, unsigned char *context); static int www_body(char *hostname, int s, int stype, unsigned char *context); static int rev_body(char *hostname, int s, int stype, unsigned char *context); @@ -2008,21 +2007,6 @@ static void print_stats(BIO *bio, SSL_CTX *ssl_ctx) SSL_CTX_sess_get_cache_size(ssl_ctx)); } -static void wait_for_async(SSL *s) -{ - int width, fd; - fd_set asyncfds; - - fd = SSL_get_async_wait_fd(s); - if (fd < 0) - return; - - width = fd + 1; - FD_ZERO(&asyncfds); - openssl_fdset(fd, &asyncfds); - select(width, (void *)&asyncfds, NULL, NULL, NULL); -} - static int sv_body(char *hostname, int s, int stype, unsigned char *context) { char *buf = NULL;