diff options
author | Rob Austein <sra@hactrn.net> | 2009-06-02 00:54:06 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2009-06-02 00:54:06 +0000 |
commit | f85f2471dd2c7af1c96ee4bcbde6b50b937ce3fa (patch) | |
tree | d16ac485c20e4435934d1021d6275827e1dc5708 | |
parent | 59e26a4ede018e52e598e3ffdd050470ab0e6894 (diff) |
Better handling of two-phase TLS shutdown.
svn path=/rpkid/rpki/https.py; revision=2484
-rw-r--r-- | rpkid/rpki/https.py | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/rpkid/rpki/https.py b/rpkid/rpki/https.py index 9bf79474..7cc1e599 100644 --- a/rpkid/rpki/https.py +++ b/rpkid/rpki/https.py @@ -311,7 +311,7 @@ class http_stream(asynchat.async_chat): self.close() except POW.SSLUnexpectedEOFError: self.log("SSLUnexpectedEOF in handle_read()") - self.close() + self.close(force = True) def handle_write(self): assert self.retry_read is None @@ -336,18 +336,19 @@ class http_stream(asynchat.async_chat): self.close() except POW.SSLUnexpectedEOFError: self.log("SSLUnexpectedEOF in initiate_send()") - self.close() + self.close(force = True) - def close(self): + def close(self, force = False): self.log("Close requested") assert self.retry_read is None and self.retry_write is None if self.tls is not None: try: ret = self.tls.shutdown() self.log("tls.shutdown() returned %d" % ret) - self.tls = None - asynchat.async_chat.close(self) - self.handle_close() + if ret or force: + self.tls = None + asynchat.async_chat.close(self) + self.handle_close() except POW.WantReadError: self.retry_read = self.close except POW.WantWriteError: |