summaryrefslogtreecommitdiff
path: root/src/sbearssl
diff options
context:
space:
mode:
Diffstat (limited to 'src/sbearssl')
-rw-r--r--src/sbearssl/sbearssl_run.c9
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") ;