BUG/MEDIUM: ssl: review polling on reneg.

SSL may return SSL_ERROR_WANT_WRITE or SSL_ERROR_WANT_READ when switching
from data to handshake even if it does not need to poll first.
This commit is contained in:
Emeric Brun 2012-11-08 17:56:20 +01:00 committed by Willy Tarreau
parent 70d0ad560c
commit 8af8dd1a9a

View File

@ -978,9 +978,9 @@ static int ssl_sock_to_buf(struct connection *conn, struct buffer *buf, int coun
else { else {
ret = SSL_get_error(conn->xprt_ctx, ret); ret = SSL_get_error(conn->xprt_ctx, ret);
if (ret == SSL_ERROR_WANT_WRITE) { if (ret == SSL_ERROR_WANT_WRITE) {
/* handshake is running, and it needs to poll for a write event */ /* handshake is running, and it needs to enable write */
conn->flags |= CO_FL_SSL_WAIT_HS; conn->flags |= CO_FL_SSL_WAIT_HS;
__conn_sock_poll_send(conn); __conn_sock_want_send(conn);
break; break;
} }
else if (ret == SSL_ERROR_WANT_READ) { else if (ret == SSL_ERROR_WANT_READ) {
@ -1061,13 +1061,9 @@ static int ssl_sock_from_buf(struct connection *conn, struct buffer *buf, int fl
break; break;
} }
else if (ret == SSL_ERROR_WANT_READ) { else if (ret == SSL_ERROR_WANT_READ) {
/* handshake is running, and /* handshake is running, and it needs to enable read */
it needs to poll for a read event,
write polling must be disabled cause
we are sure we can't write anything more
before handshake re-performed */
conn->flags |= CO_FL_SSL_WAIT_HS; conn->flags |= CO_FL_SSL_WAIT_HS;
__conn_sock_poll_recv(conn); __conn_sock_want_recv(conn);
break; break;
} }
goto out_error; goto out_error;