summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAllan Saddi <allan@saddi.com>2005-06-13 06:10:01 +0000
committerAllan Saddi <allan@saddi.com>2005-06-13 06:10:01 +0000
commit5c2185638b8518927e4901036d1b4506bfeb2626 (patch)
tree3768c6dec7206c8a2de90c38ced3001ea30f12ce
parentcbb20d0bd7a37b755ea6589e3a5010b6143bf8a7 (diff)
downloadflup-5c2185638b8518927e4901036d1b4506bfeb2626.tar.gz
Cleanly close connection socket to avoid sending a TCP RST to
the web server. (fcgi_base)
-rw-r--r--ChangeLog5
-rw-r--r--flup/server/fcgi_base.py13
2 files changed, 17 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index cc558f3..4f6c2b1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2005-06-12 Allan Saddi <asaddi@europa.saddi.net>
+
+ * Cleanly close connection socket to avoid sending a TCP RST to
+ the web server. (fcgi_base) Fix suggested by Dima Barsky.
+
2005-05-31 Allan Saddi <asaddi@ganymede.saddi.net>
* Take scriptName from the WSGI_SCRIPT_NAME environment variable
diff --git a/flup/server/fcgi_base.py b/flup/server/fcgi_base.py
index 69ed2a0..c09ab5c 100644
--- a/flup/server/fcgi_base.py
+++ b/flup/server/fcgi_base.py
@@ -619,6 +619,17 @@ class Connection(object):
def _cleanupSocket(self):
"""Close the Connection's socket."""
+ try:
+ self._sock.shutdown(socket.SHUT_WR)
+ except:
+ return
+ try:
+ while True:
+ r, w, e = select.select([self._sock], [], [])
+ if not r or not self._sock.recv(1024):
+ break
+ except:
+ pass
self._sock.close()
def run(self):
@@ -701,7 +712,7 @@ class Connection(object):
if __debug__: _debug(2, 'end_request: flags = %d' % req.flags)
if not (req.flags & FCGI_KEEP_CONN) and not self._requests:
- self._sock.close()
+ self._cleanupSocket()
self._keepGoing = False
def _do_get_values(self, inrec):