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()