ostinelli/misultin — Issue #99: Misultin closing handling not rfc6455/websocket compatible
Author: majek
Created: 2012-02-09 16:49:39+00:00
State: open

I'm using a python websocket client: `WebSocket-for-Python`. Actually, I'm using quite an old version:

./venv/bin/pip install git+git://github.com/majek/WebSocket-for-Python.git

With this client, the program hangs instead of quitting ([utils.py](https://github.com/sockjs/sockjs-protocol/blob/master/utils.py))

from utils import WebSocket8Client
ws = WebSocket8Client("http://localhost:8000/")
ws.close() # program hangs here

Upon further investigation I was able to isolate the issue. The problem is that misultin is not closing a connection when receiving an unmasked frame (see: http://tools.ietf.org/html/rfc6455):

> "The server MUST close the connection upon receiving a frame that is not masked"

Apparently misultin is not closing a connection when receiving frame `\x88\x00` (unmasked fin frame). On the other hand, a proper close frame with masking, like `\x88\x80\xaa\xaa\xaa\xaa' seems to be understood by misultin (and the connection is clsoed).

Steps to reproduce: https://gist.github.com/1781022

1. ./misultin_ws_close_bug.erl
2. run `node client-raw.js` with sending [\x88, \x00] and see it hanging forever.
3. run `node client-raw.js` with sending [\x88, \x80, \xaa, \xaa, \xaa, \xaa] and see it closing the connection quickly