aboutsummaryrefslogtreecommitdiffstats
path: root/netlib/tcp.py
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@nullcube.com>2012-07-21 20:51:05 +1200
committerAldo Cortesi <aldo@nullcube.com>2012-07-21 20:51:05 +1200
commit619f3c6edce50a6e83b817d43ee0357cc763dd3d (patch)
treefeda198c55588cb169830da72fe6b1ecec692e0f /netlib/tcp.py
parentb2c491fe3936b04b0c8e6349775bf53063c170a6 (diff)
downloadmitmproxy-619f3c6edce50a6e83b817d43ee0357cc763dd3d.tar.gz
mitmproxy-619f3c6edce50a6e83b817d43ee0357cc763dd3d.tar.bz2
mitmproxy-619f3c6edce50a6e83b817d43ee0357cc763dd3d.zip
Handle unexpected SSL connection termination in readline.
Diffstat (limited to 'netlib/tcp.py')
-rw-r--r--netlib/tcp.py11
1 files changed, 8 insertions, 3 deletions
diff --git a/netlib/tcp.py b/netlib/tcp.py
index ac4fab95..a68b608b 100644
--- a/netlib/tcp.py
+++ b/netlib/tcp.py
@@ -56,7 +56,7 @@ class FileLike:
while length > 0:
try:
data = self.o.read(length)
- except (SSL.ZeroReturnError, SSL.SysCallError):
+ except SSL.ZeroReturnError:
break
except SSL.WantReadError:
if (time.time() - start) < self.o.gettimeout():
@@ -68,6 +68,8 @@ class FileLike:
raise NetLibTimeout
except socket.error:
raise NetLibDisconnect
+ except SSL.SysCallError, v:
+ raise NetLibDisconnect
if not data:
break
result += data
@@ -82,7 +84,7 @@ class FileLike:
else:
r = self.o.write(v)
return r
- except SSL.Error:
+ except (SSL.Error, socket.error):
raise NetLibDisconnect()
def readline(self, size = None):
@@ -91,7 +93,10 @@ class FileLike:
while True:
if size is not None and bytes_read >= size:
break
- ch = self.read(1)
+ try:
+ ch = self.read(1)
+ except NetLibDisconnect:
+ break
bytes_read += 1
if not ch:
break