diff options
author | Azat Khuzhin <azat@libevent.org> | 2023-05-14 20:04:34 +0200 |
---|---|---|
committer | Azat Khuzhin <azat@libevent.org> | 2023-05-14 20:04:44 +0200 |
commit | e8cbe7b6e12a7b43dde726dfe08922c300fd9430 (patch) | |
tree | d8069f294310ef5c1dee9b318edafae57ae53d47 /bufferevent_ssl.c | |
parent | d06e573c600c46d1c4585be78f4329b300fb4a65 (diff) | |
parent | 7652cf4068f77905a56b9165455ec7e90917ec31 (diff) | |
download | libevent-e8cbe7b6e12a7b43dde726dfe08922c300fd9430.tar.gz |
Merge branch 'ssl/fix-partial-read' - #1451
* ssl/fix-partial-read:
ssl: do not triger EOF if some data had been successfully read
ssl: rename err_is_ok to handshake_is_ok (internal API)
Diffstat (limited to 'bufferevent_ssl.c')
-rw-r--r-- | bufferevent_ssl.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/bufferevent_ssl.c b/bufferevent_ssl.c index 64c36ae6..17046b82 100644 --- a/bufferevent_ssl.c +++ b/bufferevent_ssl.c @@ -284,7 +284,10 @@ do_read(struct bufferevent_ssl *bev_ssl, int n_to_read) { } else { int err = bev_ssl->ssl_ops->get_error(bev_ssl->ssl, r); bev_ssl->ssl_ops->print_err(err); - if (bev_ssl->ssl_ops->err_is_want_read(err)) { + if (bev_ssl->ssl_ops->err_is_ok(err) && result & OP_MADE_PROGRESS) { + /* Process existing data */ + break; + } else if (bev_ssl->ssl_ops->err_is_want_read(err)) { /* Can't read until underlying has more data. */ if (bev_ssl->read_blocked_on_write) if (clear_rbow(bev_ssl) < 0) @@ -706,7 +709,7 @@ do_handshake(struct bufferevent_ssl *bev_ssl) } bev_ssl->ssl_ops->decrement_buckets(bev_ssl); - if (bev_ssl->ssl_ops->err_is_ok(r)) { + if (bev_ssl->ssl_ops->handshake_is_ok(r)) { evutil_socket_t fd = event_get_fd(&bev_ssl->bev.bev.ev_read); /* We're done! */ bev_ssl->state = BUFFEREVENT_SSL_OPEN; |