aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2011-09-07 03:25:44 +0000
committerRob Austein <sra@hactrn.net>2011-09-07 03:25:44 +0000
commit4d803d8217497625046ade2872ea2870f9eb55bc (patch)
treebc0bafdbe712340bf7f226c650cb9128c2a4367f
parent5b0713ae34b2a3962aa91e2483f978e614c642be (diff)
Fix handling of HTTPTimeout. (#70)
Crank down HTTP timeout values. svn path=/rpkid/rpki/http.py; revision=3974
-rw-r--r--rpkid/rpki/http.py9
-rw-r--r--scripts/fakerootd.py47
2 files changed, 53 insertions, 3 deletions
diff --git a/rpkid/rpki/http.py b/rpkid/rpki/http.py
index d455e4ea..7513cc3f 100644
--- a/rpkid/rpki/http.py
+++ b/rpkid/rpki/http.py
@@ -54,14 +54,14 @@ want_persistent_server = False
## @var default_client_timeout
# Default HTTP client connection timeout.
-default_client_timeout = rpki.sundial.timedelta(minutes = 15)
+default_client_timeout = rpki.sundial.timedelta(minutes = 5)
## @var default_server_timeout
# Default HTTP server connection timeouts. Given our druthers, we'd
# prefer that the client close the connection, as this avoids the
# problem of client starting to reuse connection just as server closes
# it, so this should be longer than the client timeout.
-default_server_timeout = rpki.sundial.timedelta(minutes = 20)
+default_server_timeout = rpki.sundial.timedelta(minutes = 10)
## @var default_http_version
# Preferred HTTP version.
@@ -802,7 +802,10 @@ class http_client(http_stream):
self.log("Timeout while in state %s" % self.state, rpki.log.warn)
http_stream.handle_timeout(self)
if bad:
- raise rpki.exceptions.HTTPTimeout
+ try:
+ raise rpki.exceptions.HTTPTimeout
+ except:
+ self.handle_error()
else:
self.queue.detach(self)
diff --git a/scripts/fakerootd.py b/scripts/fakerootd.py
new file mode 100644
index 00000000..4f799e75
--- /dev/null
+++ b/scripts/fakerootd.py
@@ -0,0 +1,47 @@
+"""
+Hack to fake a catatonic rootd, for testing.
+
+$Id$
+
+Copyright (C) 2011 Internet Systems Consortium ("ISC")
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+"""
+
+import sys, socket, datetime, signal
+
+port = int(sys.argv[1]) if len(sys.argv) > 1 else 4405
+limit = int(sys.argv[2]) if len(sys.argv) > 2 else 5
+
+print "Listening on port", port
+
+s4 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+s4.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+s4.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
+s4.bind(('', port))
+s4.listen(limit)
+
+s6 = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
+s6.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+s6.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
+s6.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 1)
+s6.bind(('::1', port))
+s6.listen(limit)
+
+print "Going to sleep at", datetime.datetime.utcnow()
+
+try:
+ signal.pause()
+except KeyboardInterrupt:
+ sys.exit(0)
+