mongoose 7.2新版中使用https出现握手失败,由于mongoose是非阻塞的,所以第一次握手时可能返回失败,第二次接收握手数据时就能成功。
但是我在使用的时候出现因为第一次握手失败,导致走到 ERR_print_errors_fp()方法时出现异常。
这时候可以多做一次SSL_accept,避免第一次握手失败直接异常,第二次能保证成功完成握手
int mg_tls_handshake(struct mg_connection *c) {
struct mg_tls *tls = (struct mg_tls *) c->tls;
int rc;
SSL_set_fd(tls->ssl, (long) c->fd);
rc = c->is_client ? SSL_connect(tls->ssl) : SSL_accept(tls->ssl);
if (rc == 1) {
LOG(LL_DEBUG, ("%lu success", c->id));
c->is_tls_hs = 0;
return 1;
} else {
int code;
ERR_print_errors_fp(stderr);
code = mg_tls_err(tls, rc);
if (code != 0) mg_error(c, "tls hs: rc %d, err %d", rc, code);
return 0;
}
}