title: Shut down Flask SocketIO Server
body: <p>For circumstances outside of my control, I need to use the Flask server to serve basic html files, the Flask SocketIO wrapper to provide a web socket interface between any clients and the server. The <code>async_mode</code> has to be <code>threading</code> instead of <code>gevent</code> or <code>eventlet</code>, I understand that it is less efficient to use threading, but I can't use the other two frameworks.</p>
  
  <p>In my unit tests, I need to shut down and restart the web socket server. When I attempt to shut down the server, I get the <code>RunTimeError</code> 'Cannot stop unknown web server.' This is because the function <code>werkzeug.server.shutdown</code> is not found in the Flask Request Environment <code>flask.request.environ</code> object.</p>
  
  <p>Here is how the server is started.</p>
  
  <pre><code>SERVER = flask.Flask(__name__)
  
  WEBSOCKET = flask_socketio.SocketIO(SERVER, async_mode='threading')
  
  WEBSOCKET.run(SERVER, host='127.0.0.1', port=7777)
  </code></pre>
  
  <p>Here is the short version of how I'm attempting to shut down the server.</p>
  
  <pre><code>client = WEBSOCKET.test_client(SERVER)
  
  @WEBSOCKET.on('kill')
  def killed():
      WEBSOCKET.stop()
  
  try:
      client.emit('kill')
  except:
      pass
  </code></pre>
  
  <p>The stop method must be called from within a flask request context, hence the weird kill event callback. Inside the stop method, the <code>flask.request.environ</code> has the value</p>
  
  <pre><code>'CONTENT_LENGTH' (40503696) = {str} '0'
  'CONTENT_TYPE' (60436576) = {str} ''
  'HTTP_HOST' (61595248) = {str} 'localhost'
  'PATH_INFO' (60437104) = {str} '/socket.io'
  'QUERY_STRING' (60327808) = {str} ''
  'REQUEST_METHOD' (40503648) = {str} 'GET'
  'SCRIPT_NAME' (60437296) = {str} ''
  'SERVER_NAME' (61595296) = {str} 'localhost'
  'SERVER_PORT' (61595392) = {str} '80'
  'SERVER_PROTOCOL' (65284592) = {str} 'HTTP/1.1'
  'flask.app' (65336784) = {Flask} &lt;Flask 'server'&gt;
  'werkzeug.request' (60361056) = {Request} &lt;Request 'http://localhost/socket.io' [GET]&gt;
  'wsgi.errors' (65338896) = {file} &lt;open file '&lt;stderr&gt;', mode 'w' at 0x0000000001C92150&gt;
  'wsgi.input' (65338848) = {StringO} &lt;cStringIO.StringO object at 0x00000000039902D0&gt;
  'wsgi.multiprocess' (65369288) = {bool} False
  'wsgi.multithread' (65369232) = {bool} False
  'wsgi.run_once' (65338944) = {bool} False
  'wsgi.url_scheme' (65338800) = {str} 'http'
  'wsgi.version' (65338752) = {tuple} &lt;type 'tuple'&gt;: (1, 0)
  </code></pre>
  
  <p>My question is, how do I set up the Flask server to have the  <code>werkzeug.server.shutdown</code>method available inside the flask request contexts?</p>
  
  <p>Also this is using Python 2.7</p>