summaryrefslogtreecommitdiff
path: root/paste/httpserver.py
diff options
context:
space:
mode:
authorianb <devnull@localhost>2007-12-17 17:12:02 +0000
committerianb <devnull@localhost>2007-12-17 17:12:02 +0000
commitee3c1556ed858861387cea0af34b447e7f1d5f9c (patch)
tree182cd8ac89c33f2d1f8014317e494e9e31375207 /paste/httpserver.py
parentac5e7a05bb505ef415a2b1878f3fd09d791e5169 (diff)
downloadpaste-ee3c1556ed858861387cea0af34b447e7f1d5f9c.tar.gz
Use threadsafe connection class, to avoid some https errors (#211)
Diffstat (limited to 'paste/httpserver.py')
-rwxr-xr-xpaste/httpserver.py11
1 files changed, 9 insertions, 2 deletions
diff --git a/paste/httpserver.py b/paste/httpserver.py
index 71c3193..32ca923 100755
--- a/paste/httpserver.py
+++ b/paste/httpserver.py
@@ -314,7 +314,7 @@ class WSGIHandlerMixin:
# http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/442473
#
try:
- from OpenSSL import SSL
+ from OpenSSL import SSL, tsafe
SocketErrors = (socket.error, SSL.ZeroReturnError, SSL.SysCallError)
except ImportError:
# Do not require pyOpenSSL to be installed, but disable SSL
@@ -360,7 +360,14 @@ else:
self.socket_type)
self.ssl_context = ssl_context
if ssl_context:
- self.socket = SSL.Connection(ssl_context, self.socket)
+ class TSafeConnection(tsafe.Connection):
+ def settimeout(self, *args):
+ self._lock.acquire()
+ try:
+ return self._ssl_conn.settimeout(*args)
+ finally:
+ self._lock.release()
+ self.socket = TSafeConnection(ssl_context, self.socket)
self.server_bind()
self.server_activate()