#!/bin/env python import socket, select, sys HOST = '' PORT = 9999 client_fd = [] fd_to_conn = {} s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) listen_fd = s.fileno() client_fd.append(listen_fd) s.bind((HOST, PORT)) s.listen(100) s.settimeout(5) while True: r_fds, w_fds, e_fds = select.select(client_fd, [], []) for fd in r_fds: if fd == listen_fd: conn, addr = s.accept() print 'Accepted connection from %s:%d [fd: %d]' % (addr[0], addr[1], conn.fileno()) fd_to_conn[conn.fileno()] = conn client_fd.append(conn.fileno()) else: data = fd_to_conn[fd].recv(1024) if not data: # closed connection print 'Goodbye' fd_to_conn[fd].close() del(fd_to_conn[fd]) client_fd.pop(client_fd.index(fd)) else: fd_to_conn[fd].send(data)