From eee91cda8012d7d39c0401a0465af736aa2d136a Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Fri, 26 Mar 2010 19:27:16 +0000 Subject: [PATCH] Issue #8222: Enable the SSL_MODE_AUTO_RETRY flag on SSL sockets, so that blocking reads and writes are always retried by OpenSSL itself. (this is a followup to issue #3890) --- Misc/NEWS | 4 +++- Modules/_ssl.c | 3 +-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS index 15807689d4..581ee9a0d5 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -59,7 +59,9 @@ Library - Issue #8200: logging: Handle errors when multiprocessing is not fully loaded when logging occurs. -- Issue #3890: Fix recv() and recv_into() on non-blocking SSL sockets. +- Issue #3890, #8222: Fix recv() and recv_into() on non-blocking SSL sockets. + Also, enable the SSL_MODE_AUTO_RETRY flag on SSL sockets, so that blocking + reads and writes are always retried by OpenSSL itself. - Issue #8179: Fix macpath.realpath() on a non-existing path. diff --git a/Modules/_ssl.c b/Modules/_ssl.c index f5f9ebaeb1..52fdf0ffd3 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -9,8 +9,6 @@ directly. XXX should partial writes be enabled, SSL_MODE_ENABLE_PARTIAL_WRITE? - - XXX what about SSL_MODE_AUTO_RETRY? */ #include "Python.h" @@ -370,6 +368,7 @@ newPySSLObject(PySocketSockObject *Sock, char *key_file, char *cert_file, self->ssl = SSL_new(self->ctx); /* New ssl struct */ PySSL_END_ALLOW_THREADS SSL_set_fd(self->ssl, Sock->sock_fd); /* Set the socket for SSL */ + SSL_set_mode(self->ssl, SSL_MODE_AUTO_RETRY); /* If the socket is in non-blocking mode or timeout mode, set the BIO * to non-blocking mode (blocking is the default) -- 2.40.0