diff options
Diffstat (limited to 'src/sbearssl')
-rw-r--r-- | src/sbearssl/sbearssl_run.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/sbearssl/sbearssl_run.c b/src/sbearssl/sbearssl_run.c index 44dbe88..ad2b0ad 100644 --- a/src/sbearssl/sbearssl_run.c +++ b/src/sbearssl/sbearssl_run.c @@ -19,7 +19,7 @@ void sbearssl_run (br_ssl_engine_context *ctx, int *fds, tain_t const *tto, uint iopause_fd x[4] ; unsigned int xindex[4] ; int markedforflush = 0 ; - int handshake_notdone = 1 ; + int handshake_done = 0 ; if (ndelay_on(fds[0]) < 0 || ndelay_on(fds[1]) < 0 @@ -46,11 +46,11 @@ void sbearssl_run (br_ssl_engine_context *ctx, int *fds, tain_t const *tto, uint x[j].fd = fds[0] ; x[j].events = IOPAUSE_READ ; xindex[0] = j++ ; - if (handshake_notdone) + if (!handshake_done) { if (!(*cb)(ctx, cbarg)) strerr_diefu1sys(111, "post-handshake callback failed") ; - handshake_notdone = 0 ; + handshake_done = 1 ; } } else xindex[0] = 4 ; @@ -76,7 +76,8 @@ void sbearssl_run (br_ssl_engine_context *ctx, int *fds, tain_t const *tto, uint } else xindex[3] = 4 ; - if (!j) break ; + if (xindex[0] == 4 && xindex[1] == 4 && xindex[3] == 4 && handshake_done) break ; + tain_add_g(&deadline, fds[0] >= 0 && fds[2] >= 0 && state & (BR_SSL_SENDAPP | BR_SSL_RECVREC) ? tto : &tain_infinite_relative) ; r = iopause_g(x, j, &deadline) ; if (r < 0) strerr_diefu1sys(111, "iopause") ; |