from __future__ import print_function import socket import select def main(): host = '127.0.0.1' port = 4000 backlog = 10 bufsize = 4096 server_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) readfds = set([server_sock]) try: server_sock.bind((host, port)) server_sock.listen(backlog) while True: rready, wready, xready = select.select(readfds, [], []) for sock in rready: if sock is server_sock: conn, address = server_sock.accept() readfds.add(conn) else: msg = sock.recv(bufsize) if len(msg) == 0: sock.close() readfds.remove(sock) else: print(msg) sock.send(msg) finally: for sock in readfds: sock.close() return if __name__ == '__main__': main()