aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2009-06-02 00:54:06 +0000
committerRob Austein <sra@hactrn.net>2009-06-02 00:54:06 +0000
commitf85f2471dd2c7af1c96ee4bcbde6b50b937ce3fa (patch)
treed16ac485c20e4435934d1021d6275827e1dc5708
parent59e26a4ede018e52e598e3ffdd050470ab0e6894 (diff)
Better handling of two-phase TLS shutdown.
svn path=/rpkid/rpki/https.py; revision=2484
-rw-r--r--rpkid/rpki/https.py13
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: