Ticket #1263: murder-lighttpd.py

File murder-lighttpd.py, 1.6 kB (added by jtate, 14 months ago)

Python SCGI server that kills lighttpd

Line 
1#!/usr/bin/env python
2
3import cherrypy
4import os
5from os.path import *
6import sys, urllib
7
8import conary.lib.util
9
10
11from cherrypy._cpwsgi       import wsgiApp
12
13from paste.util.scgiserver import SWAP
14from scgi import scgi_server
15from types import MethodType
16import signal
17import socket
18import time
19import errno
20
21class Root(object):
22    @cherrypy.expose()
23    def index(self):
24        time.sleep(60)
25        return "Hello World"
26
27cherrypy.config.update({'autoreload.on': False})
28
29class NewSCGIServer(scgi_server.SCGIServer):
30    def serve_on_socket(self, s):
31        self.socket = s
32        self.socket.listen(40)
33        signal.signal(signal.SIGHUP, self.hup_signal)
34        while 1:
35            try:
36                conn, addr = self.socket.accept()
37                for x in xrange(3,1024):
38                    try:
39                        os.close(x)
40                    except:
41                        pass
42            except socket.error, e:
43                if e[0] != errno.EINTR:
44                    raise  # something weird
45            if self.restart:
46                self.do_restart()
47
48
49def serve_application (application, prefix, port):
50    class rAASCGIAppHandler(SWAP):
51        def __init__(self, *args, **kwargs):
52            self.prefix = prefix
53            self.app_obj = application
54            SWAP.__init__(self, *args, **kwargs)
55
56    server = NewSCGIServer(rAASCGIAppHandler, port=port)
57
58    server.serve()
59
60cherrypy.root = Root()
61
62# Start the server
63cherrypy.server.start(init_only=True, server_class=None)
64
65serve_application(application=wsgiApp, prefix="/", port=4000)