Created
October 1, 2010 13:03
Revisions
-
micktwomey created this gist
Oct 1, 2010 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,10 @@ import socket if __name__ == "__main__": sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(("localhost", 9000)) data = "some data" sock.sendall(data) result = sock.recv(1024) print result sock.close() This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,60 @@ import multiprocessing import socket def handle(connection, address): import logging logging.basicConfig(level=logging.DEBUG) logger = logging.getLogger("process-%r" % (address,)) try: logger.debug("Connected %r at %r", connection, address) while True: data = connection.recv(1024) if data == "": logger.debug("Socket closed remotely") break logger.debug("Received data %r", data) connection.sendall(data) logger.debug("Sent data") except: logger.exception("Problem handling request") finally: logger.debug("Closing socket") connection.close() class Server(object): def __init__(self, hostname, port): import logging self.logger = logging.getLogger("server") self.hostname = hostname self.port = port def start(self): self.logger.debug("listening") self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.socket.bind((self.hostname, self.port)) self.socket.listen(1) while True: conn, address = self.socket.accept() self.logger.debug("Got connection") process = multiprocessing.Process(target=handle, args=(conn, address)) process.daemon = True process.start() self.logger.debug("Started process %r", process) if __name__ == "__main__": import logging logging.basicConfig(level=logging.DEBUG) server = Server("0.0.0.0", 9000) try: logging.info("Listening") server.start() except: logging.exception("Unexpected exception") finally: logging.info("Shutting down") for process in multiprocessing.active_children(): logging.info("Shutting down process %r", process) process.terminate() process.join() logging.info("All done")