static const char *do_handshake(struct Worker *w, int fd) { int err; const char *msg; err = tls_handshake(w->ctx); if (err == TLS_WANT_POLLIN) { return wait_for_event(w, EV_READ); } else if (err == TLS_WANT_POLLIN) { return wait_for_event(w, EV_WRITE); } else if (err == 0) { w->wstate = CONNECTED; return done_handshake(w); } msg = tls_error(w->ctx ? w->ctx : w->base); return msg ? msg : "handshake failure"; }
static const char *do_handshake(struct Worker *w, int fd) { int err; const char *msg; if (w->is_server) { err = tls_accept_socket(w->base, &w->ctx, fd); } else { err = tls_connect_socket(w->ctx, fd, w->hostname); } if (err == TLS_READ_AGAIN) { return wait_for_event(w, EV_READ); } else if (err == TLS_WRITE_AGAIN) { return wait_for_event(w, EV_WRITE); } else if (err == 0) { w->wstate = CONNECTED; return done_handshake(w); } msg = tls_error(w->ctx ? w->ctx : w->base); return msg ? msg : "handshake failure"; }