Christian Heimes <li...@cheimes.de> added the comment: The issue can occur when the peer sends data while processing the close notify alert.
The meaningless SSL_ERROR_SYSCALL in SSL_shutdown() is even more severe with OpenSSL 1.1.1 and TLS 1.3. In case the client only writes and never reads, SSL_shutdown fails to unwrap the socket. The issue is caused by the fact that the session ticket is transferred after the handshake. With a SSL_read(), the ticket is stuck on the wire and may not be consumed until OpenSSL waits for close notify TLS alert. In https://github.com/openssl/openssl/issues/6262#issuecomment-389987860 Kurt wrote: > The peer is still allowed to send data after receiving the "close notify" > event. If the peer did send data it need to be processed by calling > SSL_read() before calling SSL_shutdown() a second time. SSL_read() will > indicate the end of the peer data by returning <= 0 and SSL_get_error() > returning SSL_ERROR_ZERO_RETURN. It is recommended to call SSL_read() between > SSL_shutdown() calls. I hacked SSL_read() into the code and the problem did no longer occur for me. My workaround is not a proper solution, though. The shutdown code is slightly complicated (to say the least). ---------- priority: normal -> deferred blocker title: SSL_shutdown can return meaningless SSL_ERROR_SYSCALL -> SSL_shutdown needs SSL_read() until SSL_ERROR_ZERO_RETURN versions: +Python 3.8 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue30437> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com