print '\nextarnal ip: ' + external_ip #TODO: maybe use separate socket for user creation main_socket = socket.socket() main_socket.bind(('', 4590)) my_ip, my_port = main_socket.getsockname() print 'internal endpoint: ' + my_ip + ':' + str(my_port) print '\n\n------------\n' main_socket.listen(5) connections = [main_socket] users_sockets = {} # { 'username': [active socket, sleeping socket1, ..., sleeping socketN] } should_exit = False db = Database.Database() MessageParser.init(db, users_sockets) t = threading.Thread(target=server_thread) t.start() new_connections_listener() print 'unloading resources...' t.join() for con in connections: con.close() for socks in users_sockets.values(): socks.close() main_socket.close() db.close()