diff --git a/libmproxy/protocol/http.py b/libmproxy/protocol/http.py index da7c42404..bebb4f7bf 100644 --- a/libmproxy/protocol/http.py +++ b/libmproxy/protocol/http.py @@ -996,7 +996,7 @@ class HTTPHandler(ProtocolHandler): include_body=False ) break - except (tcp.NetLibDisconnect, http.HttpErrorConnClosed), v: + except (tcp.NetLibError, http.HttpErrorConnClosed), v: self.c.log( "error in server communication: %s" % repr(v), level="debug" @@ -1043,7 +1043,7 @@ class HTTPHandler(ProtocolHandler): self.c.client_conn.rfile, body_size_limit=self.c.config.body_size_limit ) - except tcp.NetLibDisconnect: + except tcp.NetLibError: # don't throw an error for disconnects that happen # before/between requests. return False @@ -1141,7 +1141,7 @@ class HTTPHandler(ProtocolHandler): message = repr(error) message_debug = None - if isinstance(error, tcp.NetLibDisconnect): + if isinstance(error, tcp.NetLibError): message = None message_debug = "TCP connection closed unexpectedly." elif "tlsv1 alert unknown ca" in message: diff --git a/libmproxy/protocol/tcp.py b/libmproxy/protocol/tcp.py index da0c9087c..d2d21829b 100644 --- a/libmproxy/protocol/tcp.py +++ b/libmproxy/protocol/tcp.py @@ -3,6 +3,7 @@ import select import socket from .primitives import ProtocolHandler from netlib.utils import cleanBin +from netlib.tcp import NetLibError class TCPHandler(ProtocolHandler): @@ -76,7 +77,8 @@ class TCPHandler(ProtocolHandler): ), "info" ) - dst.connection.send(contents) + # Do not use dst.connection.send here, which may raise OpenSSL-specific errors. + dst.send(contents) else: # socket.socket.send supports raw bytearrays/memoryviews if self.log: @@ -87,6 +89,6 @@ class TCPHandler(ProtocolHandler): "info" ) dst.connection.send(buf[:size]) - except socket.error as e: + except (socket.error, NetLibError) as e: self.c.log("TCP connection closed unexpectedly.", "debug") return