diff roundup/cgi/client.py @ 3628:ed76f7ee34c4

handle connection loss when responding to web requests
author Richard Jones <richard@users.sourceforge.net>
date Tue, 06 Jun 2006 01:44:44 +0000
parents 04dc3eef67b7
children ff9f4ca42454
line wrap: on
line diff
--- a/roundup/cgi/client.py	Sat May 20 07:43:17 2006 +0000
+++ b/roundup/cgi/client.py	Tue Jun 06 01:44:44 2006 +0000
@@ -1,4 +1,4 @@
-# $Id: client.py,v 1.225 2006-04-27 04:03:11 richard Exp $
+# $Id: client.py,v 1.226 2006-06-06 01:44:44 richard Exp $
 
 """WWW request handler (also used in the stand-alone server).
 """
@@ -6,7 +6,7 @@
 
 import base64, binascii, cgi, codecs, mimetypes, os
 import random, re, rfc822, stat, time, urllib, urlparse
-import Cookie
+import Cookie, socket, errno
 
 from roundup import roundupdb, date, hyperdb, password
 from roundup.cgi import templating, cgitb, TranslationService
@@ -821,7 +821,12 @@
         if not self.headers_done:
             self.header()
         if self.env['REQUEST_METHOD'] != 'HEAD':
-            self.request.wfile.write(content)
+            try:
+                self.request.wfile.write(content)
+            except socket.error, error:
+                # the end-user has gone away
+                if error.errno != errno.EPIPE:
+                    raise
 
     def write_html(self, content):
         if not self.headers_done:
@@ -840,7 +845,12 @@
             content = content.encode(self.charset, 'xmlcharrefreplace')
 
         # and write
-        self.request.wfile.write(content)
+        try:
+            self.request.wfile.write(content)
+        except socket.error, error:
+            # the end-user has gone away
+            if error.errno != errno.EPIPE:
+                raise
 
     def setHeader(self, header, value):
         '''Override a header to be returned to the user's browser.

Roundup Issue Tracker: http://roundup-tracker.org/