diff options
author | Allan Saddi <allan@saddi.com> | 2005-06-13 06:10:01 +0000 |
---|---|---|
committer | Allan Saddi <allan@saddi.com> | 2005-06-13 06:10:01 +0000 |
commit | 5c2185638b8518927e4901036d1b4506bfeb2626 (patch) | |
tree | 3768c6dec7206c8a2de90c38ced3001ea30f12ce | |
parent | cbb20d0bd7a37b755ea6589e3a5010b6143bf8a7 (diff) | |
download | flup-5c2185638b8518927e4901036d1b4506bfeb2626.tar.gz |
Cleanly close connection socket to avoid sending a TCP RST to
the web server. (fcgi_base)
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | flup/server/fcgi_base.py | 13 |
2 files changed, 17 insertions, 1 deletions
@@ -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): |