【发布时间】:2021-01-29 13:54:39
【问题描述】:
我正在尝试在非阻塞套接字上执行 SSL_shutdown。在下面的代码中,我在尝试 SSL_shutdown 后尝试轮询。
do {
err = SSL_shutdown();
if (err == 0) {
// unidirectional shutdown success, will try SSL_shutdown once more and exit
} else if (err == 1) {
//shutdown complete. Exit
} else {
ec = SSL_get_error(ctx, err);
if (ec == SSL_ERROR_WANT_READ) {
rc = poll(fd, POLLIN|POLLPRI, timeout);
if (rc > 0) {
continue;
} else {
break;
}
} else if (ec == SSL_ERROR_WANT_WRITE) {
rc = poll(fd, POLLOUT, timeout);
if (rc > 0) {
continue;
} else {
break;
}
} else {
break;
}
}
} while(1);
在成功poll 之后,套接字是否可能是可写或可读的,并且触发关闭将再次 WANT_WRITE 或 WANT_READ。上面的代码会不会陷入死循环?
【问题讨论】: