Skip to content

Instantly share code, notes, and snippets.

@micktwomey
Created October 1, 2010 13:03

Revisions

  1. micktwomey created this gist Oct 1, 2010.
    10 changes: 10 additions & 0 deletions client.py
    Original 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()
    60 changes: 60 additions & 0 deletions server.py
    Original 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")