Mercurial > p > roundup > code
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
