import socket import asyncore import sys import os body = "

Hello there!

" class Listener(asyncore.dispatcher): def __init__(self, port): asyncore.dispatcher.__init__(self) self.create_socket(socket.AF_INET, socket.SOCK_STREAM) self.bind(("0.0.0.0", port)) self.listen(1) def handle_accept(self): c = self.accept() RequestHandler(c[0]) class RequestHandler(asyncore.dispatcher): def __init__(self, sock): asyncore.dispatcher.__init__(self, sock) self.gotRequest = False self.data = "" self.state = 0 # 0: reading, 1: writing, 2: closed print "Received request" def handle_read(self): self.data = self.data + self.recv(4196) if self.data.find("\r\n\r\n") >= 0: self.state = 1 self.output = "HTTP/1.0 200 OK\r\nContent-Length: "+str(len(body))+"\r\n\r\n"+body print "Received data" def handle_write(self): c = self.send(self.output) self.output = self.output[c:] if len(self.output) == 0: self.state = 2 self.close() print "Sent; closing." def readable(self): return self.state == 0 def writable(self): return self.state == 1 def main(): port = int(sys.argv[1]) server = Listener(port) print "listening on", port try: asyncore.loop() except KeyboardInterrupt: print "finishing" server.close() if __name__ == "__main__": main()