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
|