diff options
Diffstat (limited to 'examples')
-rwxr-xr-x | examples/einhorn_http.py | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/examples/einhorn_http.py b/examples/einhorn_http.py new file mode 100755 index 0000000..7d93e61 --- /dev/null +++ b/examples/einhorn_http.py @@ -0,0 +1,40 @@ +#!/usr/bin/python3 + +import os +import sys +import socket +import socketserver +import http.server + +class EinhornTCPServer(socketserver.TCPServer): + + def __init__(self, server_address, RequestHandlerClass): + socketserver.BaseServer.__init__(self, server_address, RequestHandlerClass) + + # Try to sniff first socket + try: + fd = int(os.environ['EINHORN_FD_0']) + print("Will try to listen with fd=%d" % fd) + except KeyError: + print("Couldn't find EINHORN_FD_0 env variable... is this running under einhorn?") + sys.exit(1) + + #self.socket = socket.fromfd(socket.AF_INET, socket.SOCK_STREAM, fd) + self.socket = socket.socket(fileno=fd) + + try: + self.server_activate() + except: + self.server_close() + raise + +if __name__ == "__main__": + Handler = http.server.SimpleHTTPRequestHandler + try: + httpd = EinhornTCPServer(None, Handler) + except: + print("Falling back on vanilla http server on 8080") + httpd = socketserver.TCPServer(("localhost", 8080), Handler) + + print("Serving!") + httpd.serve_forever() |