mirror of
https://github.com/yhirose/cpp-httplib.git
synced 2026-10-14 10:29:35 +00:00
Don't wait for the peer's close_notify on OpenSSL shutdown
tls::shutdown() on OpenSSL called SSL_shutdown() a second time to wait for the peer's close_notify. An idle keep-alive client never sends one, so closing its connection held the worker thread until the read timeout, and Server::stop() waited for it. Send close_notify and return, as the Mbed TLS and wolfSSL backends already do.
This commit is contained in:
1 parent
09c02f1335
commit
52f214bf2e
2 files changed
+47
-5
No files matched your search
@@ -19341,11 +19341,11 @@ inline void shutdown(session_t session, bool graceful) {
|
||||
|
||||
auto ssl = static_cast<SSL *>(session);
|
||||
if (graceful) {
|
||||
// First call sends close_notify
|
||||
if (SSL_shutdown(ssl) == 0) {
|
||||
// Second call waits for peer's close_notify
|
||||
SSL_shutdown(ssl);
|
||||
}
|
||||
// Send close_notify without waiting for the peer's. The connection is
|
||||
// closed right after this, so a unidirectional shutdown is enough, and an
|
||||
// idle peer that never answers would otherwise hold this thread until the
|
||||
// read timeout. The other backends do not wait either.
|
||||
SSL_shutdown(ssl);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user