示例#1
0
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";
}
示例#2
0
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";
}