diff --git a/scapy/layers/tls/automaton.py b/scapy/layers/tls/automaton.py index 647ad5280b4..445a3386ebf 100644 --- a/scapy/layers/tls/automaton.py +++ b/scapy/layers/tls/automaton.py @@ -69,6 +69,12 @@ def __init__(self, *args, **kwargs): kwargs["recvsock"] = lambda *args, **kwargs: None super(_TLSAutomaton, self).__init__(*args, **kwargs) + def destroy(self, force=False): + # Automaton.destroy() does not know about the TLS socket + if getattr(self, "socket", None) is not None: + self.socket.close() + super(_TLSAutomaton, self).destroy(force=force) + def parse_args(self, mycert=None, mykey=None, **kargs): self.verbose = kargs.pop("verbose", True) diff --git a/test/scapy/layers/tls/tlsclientserver.uts b/test/scapy/layers/tls/tlsclientserver.uts index 18b7c4fa7e9..0349541bd7a 100644 --- a/test/scapy/layers/tls/tlsclientserver.uts +++ b/test/scapy/layers/tls/tlsclientserver.uts @@ -348,6 +348,7 @@ def test_tls_client(suite, version, curve=None, cookie=False, client_auth=False, print("Server stopped. Destroying server...") atmtsrv.destroy(force=True) print("Server destroyed.") + assert atmtsrv.socket is None or atmtsrv.socket.fileno() == -1 # re-raise if client failed. if final_reason: raise ValueError(final_reason.atmt_origfunc)