提交 e1b9840e 编写于 作者: M Matt Caswell

Add s_client support for waiting for async

s_server already had the ability to wait on an async file descriptor. This
adds it to s_client too.
Reviewed-by: NRich Salz <rsalz@openssl.org>
上级 9920a58e
...@@ -2884,3 +2884,17 @@ BIO *bio_open_default_quiet(const char *filename, char mode, int format) ...@@ -2884,3 +2884,17 @@ BIO *bio_open_default_quiet(const char *filename, char mode, int format)
return bio_open_default_(filename, mode, format, 1); 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);
}
...@@ -162,6 +162,7 @@ CONF *app_load_config(const char *filename); ...@@ -162,6 +162,7 @@ CONF *app_load_config(const char *filename);
CONF *app_load_config_quiet(const char *filename); CONF *app_load_config_quiet(const char *filename);
int app_load_modules(const CONF *config); int app_load_modules(const CONF *config);
void unbuffer(FILE *fp); void unbuffer(FILE *fp);
void wait_for_async(SSL *s);
/* /*
* Common verification options. * Common verification options.
......
...@@ -1897,6 +1897,7 @@ int s_client_main(int argc, char **argv) ...@@ -1897,6 +1897,7 @@ int s_client_main(int argc, char **argv)
break; break;
case SSL_ERROR_WANT_ASYNC: case SSL_ERROR_WANT_ASYNC:
BIO_printf(bio_c_out, "write A BLOCK\n"); BIO_printf(bio_c_out, "write A BLOCK\n");
wait_for_async(con);
write_ssl = 1; write_ssl = 1;
read_tty = 0; read_tty = 0;
break; break;
...@@ -1984,6 +1985,7 @@ int s_client_main(int argc, char **argv) ...@@ -1984,6 +1985,7 @@ int s_client_main(int argc, char **argv)
break; break;
case SSL_ERROR_WANT_ASYNC: case SSL_ERROR_WANT_ASYNC:
BIO_printf(bio_c_out, "read A BLOCK\n"); BIO_printf(bio_c_out, "read A BLOCK\n");
wait_for_async(con);
write_tty = 0; write_tty = 0;
read_ssl = 1; read_ssl = 1;
if ((read_tty == 0) && (write_ssl == 0)) if ((read_tty == 0) && (write_ssl == 0))
......
...@@ -194,7 +194,6 @@ typedef unsigned int u_int; ...@@ -194,7 +194,6 @@ typedef unsigned int u_int;
static RSA *tmp_rsa_cb(SSL *s, int is_export, int keylength); static RSA *tmp_rsa_cb(SSL *s, int is_export, int keylength);
#endif #endif
static int not_resumable_sess_cb(SSL *s, int is_forward_secure); 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 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 www_body(char *hostname, int s, int stype, unsigned char *context);
static int rev_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) ...@@ -2008,21 +2007,6 @@ static void print_stats(BIO *bio, SSL_CTX *ssl_ctx)
SSL_CTX_sess_get_cache_size(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) static int sv_body(char *hostname, int s, int stype, unsigned char *context)
{ {
char *buf = NULL; char *buf = NULL;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册