Python Socket Server with socket library
I wrote python socket server in Python Socket Server - Shammerism, but this is using SocketServer. This can't be changed flexibly so I write again with socket library.
#!/usr/bin/env python import argparse import socket from socket import gethostname from time import gmtime, strftime parser = argparse.ArgumentParser() parser.add_argument('-host', dest = 'dest_ip', default = 'localhost') parser.add_argument('-port', dest = 'dest_port', default = '8000') parser.add_argument('-debug', dest = 'debug', default = False) param = vars(parser.parse_args()) listen_addr = param['dest_ip'] listen_port = param['dest_port'] debug = param['debug'] server = socket.socket(socket.AF_INET) try: print 'Listening on ' + listen_addr + ':' + listen_port server.bind((listen_addr,int(listen_port))) server.listen(1) while True: try: client, addr= server.accept() request = [] while True: char = client.recv(1) try: if char == '': print 'FIN received from client.' client.close() break byte = ord(char) request.append(byte) if 2 < len(request) and request[-2] == 13 and request[-1] == 10: if request[-4] == 13 and request[-3] == 10: if debug: print '##########' print '#' print '# Finished HTTP REQUEST Header parsing!!!' print '#' print '##########' break except Error, e: print 'Closing a client socket because unexpected error happened, ' + e.args[1] client.close() break body = strftime("%b %d %Y %H:%M:%S", gmtime()) + " " + gethostname() + '\n' response = '\r\n'.join([ "HTTP/1.1 200 OK", "Server: SimpleWebServer", "Content-Type: text/plain;charset=UTF-8", "Content-Length: " + str(len(body)), "" ]); response = response + '\r\n' + body client.send(response) client.close() except socket.error, se: print 'Error : ' + str(se.args[0]) + ':' + se.args[1] finally: server.close()