python: Rethrow special IOErrors when a client has aborted.
authorFredrik Tolf <fredrik@dolda2000.com>
Sat, 9 Apr 2011 08:58:43 +0000 (10:58 +0200)
committerFredrik Tolf <fredrik@dolda2000.com>
Sat, 9 Apr 2011 08:58:43 +0000 (10:58 +0200)
python/ashd-wsgi
python/ashd/scgi.py

index 92a254a..042bf3f 100755 (executable)
@@ -36,6 +36,10 @@ else:
         sys.exit(1)
     handler = handlermod.application
 
+class closed(IOError):
+    def __init__(self):
+        super(closed, self).__init__("The client has closed the connection.")
+
 cwd = os.getcwd()
 def absolutify(path):
     if path[0] != '/':
@@ -74,6 +78,7 @@ def unquoteurl(url):
         else:
             buf += c
     return buf
+
 def dowsgi(req):
     env = {}
     env["wsgi.version"] = 1, 0
@@ -130,8 +135,11 @@ def dowsgi(req):
         if not data:
             return
         flushreq()
-        req.sk.write(data)
-        req.sk.flush()
+        try:
+            req.sk.write(data)
+            req.sk.flush()
+        except IOError:
+            raise closed()
 
     def startreq(status, headers, exc_info = None):
         if resp:
index a4342d0..0bc7a57 100644 (file)
@@ -4,6 +4,10 @@ import threading
 class protoerr(Exception):
     pass
 
+class closed(IOError):
+    def __init__(self):
+        super(closed, self).__init__("The client has closed the connection.")
+
 def readns(sk):
     hln = 0
     while True:
@@ -88,9 +92,12 @@ def wrapwsgi(handler):
         def write(data):
             if not data:
                 return
-            flushreq()
-            sk.write(data)
-            sk.flush()
+            try:
+                flushreq()
+                sk.write(data)
+                sk.flush()
+            except IOError:
+                raise closed()
 
         def startreq(status, headers, exc_info = None):
             if resp: