diff options
author | Aldo Cortesi <aldo@nullcube.com> | 2012-07-21 20:51:05 +1200 |
---|---|---|
committer | Aldo Cortesi <aldo@nullcube.com> | 2012-07-21 20:51:05 +1200 |
commit | 619f3c6edce50a6e83b817d43ee0357cc763dd3d (patch) | |
tree | feda198c55588cb169830da72fe6b1ecec692e0f /netlib/tcp.py | |
parent | b2c491fe3936b04b0c8e6349775bf53063c170a6 (diff) | |
download | mitmproxy-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.py | 11 |
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 |