diff options
author | Azat Khuzhin <a3at.mail@gmail.com> | 2015-09-02 14:19:16 +0300 |
---|---|---|
committer | Azat Khuzhin <a3at.mail@gmail.com> | 2015-09-02 19:27:09 +0300 |
commit | e8a2da96e3fedc3ebf7d322df0fac155dfb41717 (patch) | |
tree | a16b48d89876c5fe131fdcfe7115fe9b03a3f027 /bufferevent_openssl.c | |
parent | 2a8a7112a5918387c015658af347b6b8f692c6b2 (diff) | |
download | libevent-e8a2da96e3fedc3ebf7d322df0fac155dfb41717.tar.gz |
be_openssl: don't call set_open_callbacks() if fd == -1
This must be illegal, firstly we must do set_do handshake and only after this
we could read/write.
Diffstat (limited to 'bufferevent_openssl.c')
-rw-r--r-- | bufferevent_openssl.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/bufferevent_openssl.c b/bufferevent_openssl.c index 3eb5a0fe..fbd2971f 100644 --- a/bufferevent_openssl.c +++ b/bufferevent_openssl.c @@ -980,10 +980,9 @@ set_open_callbacks(struct bufferevent_openssl *bev_ssl, evutil_socket_t fd) int rpending=0, wpending=0, r1=0, r2=0; if (event_initialized(&bev->ev_read)) { - if (fd >= 0) { - rpending = event_pending(&bev->ev_read, EV_READ, NULL); - wpending = event_pending(&bev->ev_write, EV_WRITE, NULL); - } + rpending = event_pending(&bev->ev_read, EV_READ, NULL); + wpending = event_pending(&bev->ev_write, EV_WRITE, NULL); + event_del(&bev->ev_read); event_del(&bev->ev_write); } @@ -1297,7 +1296,7 @@ be_openssl_ctrl(struct bufferevent *bev, bio = BIO_new_socket(data->fd, 0); SSL_set_bio(bev_ssl->ssl, bio, bio); } - if (bev_ssl->state == BUFFEREVENT_SSL_OPEN) + if (bev_ssl->state == BUFFEREVENT_SSL_OPEN && data->fd >= 0) return set_open_callbacks(bev_ssl, data->fd); else { return set_handshake_callbacks(bev_ssl, data->fd); |