|
[Webware-checkins] r7062 - Webware/trunk/WebKit
From: <updates@we...> - 2007-10-28 10:12
|
Author: chrisz Date: Sun Oct 28 04:11:55 2007 New Revision: 7062 Modified: Webware/trunk/WebKit/ThreadedAppServer.py Log: Fix for bug #1799135: ThreadedAppServer crash with socket error during nmap scan on NetBSD. Modified: Webware/trunk/WebKit/ThreadedAppServer.py ============================================================================== --- Webware/trunk/WebKit/ThreadedAppServer.py (original) +++ Webware/trunk/WebKit/ThreadedAppServer.py Sun Oct 28 04:11:55 2007 @@ -213,6 +213,13 @@ self._defaultConfig.update(defaultConfig) return self._defaultConfig + _ignoreErrnos = [] # silently ignore these errors: + for e in 'EAGAIN', 'EWOULDBLOCK', 'EINTR', 'ECONNABORTED', 'EPROTO': + try: + _ignoreErrnos.append(getattr(errno, e)) + except AttributeError: + pass + def mainloop(self, timeout=1): """Main thread loop. @@ -253,20 +260,30 @@ input, output, exc = select.select( self._sockets.values(), [], [], timeout) except select.error, e: - if e[0] == errno.EINTR: - continue - else: + if e[0] not in self._ignoreErrnos: raise + if debug: + print "Socket select error:", e + continue for sock in input: - self._requestID += 1 - client, addr = sock.accept() + + try: + client, addr = sock.accept() + except select.error, e: + if e[0] not in self._ignoreErrnos: + raise + if debug: + print "Socket accept error:", e + continue + serverAddress = sock.getsockname() try: handler = self._handlerCache[serverAddress].pop() except IndexError: handler = self._socketHandlers[serverAddress](self, serverAddress) + self._requestID += 1 handler.activate(client, self._requestID) self._requestQueue.put(handler) @@ -728,14 +745,6 @@ self._server.shutDown() -silentErrnos = [] # silently ignore these errors: -for e in 'EPIPE', 'ECONNABORTED', 'ECONNRESET': - try: - silentErrnos.append(getattr(errno, e)) - except AttributeError: - pass - - class TASStreamOut(ASStreamOut): """Response stream for ThreadedAppServer. @@ -746,6 +755,13 @@ """ + _ignoreErrnos = [] # silently ignore these errors: + for e in 'EPIPE', 'ECONNABORTED', 'ECONNRESET': + try: + _ignoreErrnos.append(getattr(errno, e)) + except AttributeError: + pass + def __init__(self, sock, autoCommit=False, bufferSize=8192): """Create stream. @@ -774,7 +790,7 @@ sent += self._socket.send( self._buffer[sent:sent+bufferSize]) except socket.error, e: - if debug or e[0] not in silentErrnos: + if debug or e[0] not in self._ignoreErrnos: print "StreamOut Error:", e self._closed = True raise ConnectionAbortedError |
| Thread | Author | Date |
|---|---|---|
| [Webware-checkins] r7062 - Webware/trunk/WebKit | <updates@we...> |