From a461817309b5393791f6239af5d5560cfa52e79f Mon Sep 17 00:00:00 2001 From: benoitc Date: Thu, 24 Jun 2010 16:20:48 +0200 Subject: [PATCH] fix websocket with protocol 076. Fix from tom on irc. Thanks! --- gunicorn/arbiter.py | 1 + gunicorn/http/message.py | 2 ++ gunicorn/workers/ggevent.py | 5 ++++- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/gunicorn/arbiter.py b/gunicorn/arbiter.py index 5a87f640..0deeead1 100644 --- a/gunicorn/arbiter.py +++ b/gunicorn/arbiter.py @@ -470,6 +470,7 @@ class Arbiter(object): worker = self.WORKERS.pop(pid) worker.tmp.close() os.unlink(worker.tmpname) + return except (KeyError, OSError): return raise diff --git a/gunicorn/http/message.py b/gunicorn/http/message.py index 0c8f4954..8a6ff556 100644 --- a/gunicorn/http/message.py +++ b/gunicorn/http/message.py @@ -79,6 +79,8 @@ class Message(object): clength = None elif name.upper() == "TRANSFER-ENCODING": chunked = value.lower() == "chunked" + elif name.upper() == "SEC-WEBSOCKET-KEY1": + clength = 8 if chunked: self.body = Body(ChunkedReader(self, self.unreader)) diff --git a/gunicorn/workers/ggevent.py b/gunicorn/workers/ggevent.py index 565903d0..07f5ff16 100644 --- a/gunicorn/workers/ggevent.py +++ b/gunicorn/workers/ggevent.py @@ -41,9 +41,10 @@ class GEventWorker(AsyncWorker): break gevent.sleep(0.1) - pool.join(timeout=self.timeout) + except KeyboardInterrupt: pass + pool.join(timeout=self.timeout) os._exit(3) def acceptor(self, pool): @@ -55,6 +56,8 @@ class GEventWorker(AsyncWorker): gt._conn = conn gt.link(self.cleanup) conn, addr, gt = None, None, None + except KeyboardInterrupt: + return except greenlet.GreenletExit: return except: