diff roundup/cgi/client.py @ 3808:36eb9e8faf30

Real handling of network errors. Fix for correctly ignoring net errors: It seems that (at least in my installed Debian version of python2.4) socket.error does not have an errno attribute but is simply a tuple of (errno, strerror). So we now try to get errno first and if this fails we try to use err [0]. This works for a simple test-script to which I can connect with telnet on port 4711 -- it will correctly detect errno.EPIPE if I terminate the telnet session: #!/usr/bin/python2.4 import socket import errno from SocketServer import TCPServer, BaseRequestHandler class Server (BaseRequestHandler) : def handle (self) : self.file = self.request.makefile () try : while True : print >> self.file, "Testing..." except socket.error, err : print getattr (err, 'errno', "Has no errno") print err [0] print err [0] == errno.EPIPE raise # end def handle # end class Server server_address = ('', 4711) s = TCPServer (server_address, Server) s.serve_forever () Sorry for the verbose log-message but I hope to document my debugging activities
author Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
date Tue, 16 Jan 2007 10:16:08 +0000
parents c27aafab067d
children 2563ddf71cd7
line wrap: on
line diff
--- a/roundup/cgi/client.py	Mon Jan 15 21:10:26 2007 +0000
+++ b/roundup/cgi/client.py	Tue Jan 16 10:16:08 2007 +0000
@@ -1,4 +1,4 @@
-# $Id: client.py,v 1.232 2007-01-15 21:10:26 schlatterbeck Exp $
+# $Id: client.py,v 1.233 2007-01-16 10:16:08 schlatterbeck Exp $
 
 """WWW request handler (also used in the stand-alone server).
 """
@@ -848,6 +848,11 @@
             call(*args, **kwargs)
         except socket.error, err:
             err_errno = getattr (err, 'errno', None)
+            if err_errno is None:
+                try:
+                    err_errno = err[0]
+                except TypeError:
+                    pass
             if err_errno not in self.IGNORE_NET_ERRORS:
                 raise
 

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