mirror of
https://github.com/Grasscutters/mitmproxy.git
synced 2024-11-27 02:24:18 +00:00
fix tcp closing for ssled connections
This commit is contained in:
parent
987fa22e64
commit
e6a8730f98
@ -238,19 +238,18 @@ class _Connection(object):
|
|||||||
else:
|
else:
|
||||||
self.connection.shutdown(socket.SHUT_WR)
|
self.connection.shutdown(socket.SHUT_WR)
|
||||||
|
|
||||||
|
if type(self.connection) != SSL.Connection or self.ssl_established:
|
||||||
# Section 4.2.2.13 of RFC 1122 tells us that a close() with any
|
# Section 4.2.2.13 of RFC 1122 tells us that a close() with any
|
||||||
# pending readable data could lead to an immediate RST being sent (which is the case on Windows).
|
# pending readable data could lead to an immediate RST being sent (which is the case on Windows).
|
||||||
# http://ia600609.us.archive.org/22/items/TheUltimateSo_lingerPageOrWhyIsMyTcpNotReliable/the-ultimate-so_linger-page-or-why-is-my-tcp-not-reliable.html
|
# http://ia600609.us.archive.org/22/items/TheUltimateSo_lingerPageOrWhyIsMyTcpNotReliable/the-ultimate-so_linger-page-or-why-is-my-tcp-not-reliable.html
|
||||||
#
|
#
|
||||||
# Do not call this for an SSL.Connection:
|
# Do not call this for every SSL.Connection:
|
||||||
# If the SSL handshake failed at the first place, OpenSSL's SSL_read tries to negotiate the connection
|
# If the SSL handshake failed at the first place, OpenSSL's SSL_read tries to negotiate the connection
|
||||||
# again at this point, calls the SNI handler and segfaults.
|
# again at this point, calls the SNI handler and segfaults.
|
||||||
# https://github.com/mitmproxy/mitmproxy/issues/373#issuecomment-58383499
|
# https://github.com/mitmproxy/mitmproxy/issues/373#issuecomment-58383499
|
||||||
# (if this turns out to be an issue for successful SSL connections,
|
|
||||||
# we should check for ssl_established or access the socket directly)
|
|
||||||
|
|
||||||
while self.connection.recv(4096): # pragma: no cover
|
while self.connection.recv(4096): # pragma: no cover
|
||||||
pass
|
pass
|
||||||
|
|
||||||
self.connection.close()
|
self.connection.close()
|
||||||
except (socket.error, SSL.Error, IOError):
|
except (socket.error, SSL.Error, IOError):
|
||||||
# Socket probably already closed
|
# Socket probably already closed
|
||||||
|
Loading…
Reference in New Issue
Block a user