Ouvir Soquete Python

Todo o abaixo mencionado está em máquinas de janelas que usam python 2.7

Olá,

Atualmente estou tentando ouvir em um soquete para envio de dados por um programa remoto. Esses dados são então impressos na tela e a entrada do usuário é solicitada, retornando então ao programa remoto. No teste eu pude fazer o programa remoto me enviar um menu de programas de linha de comando (cmd, ipconfig, whoami, ftp) e então meu programa retorna com um número como uma seleção da opção de menu.

O programa remoto recebe minha resposta e envia a saída do comando selecionado. ipconfig e whoami funcionam perfeitamente, mas o cmd e o ftp só retornam a saída do terminal uma vez. (I.E. Eu posso inserir um comando no programa FTP e enviar também o programa remoto antes que eu nunca ouça de volta)

A parte do meu código que falha é queif ready[0]: nunca fica pronto uma segunda vez após a primeira conversa.

Eu sei que o programa remoto está funcionando corretamente, como eu posso usar o netcat para agir no lugar do meu código e operar o terminal cmd indefinidamente.

Como faço para implementar corretamente um listener de soquete python que possa ser responsável por esse tipo de conexão?

Meu "programa" na sua totalidade:

import socket, sys, struct, time, select

host = ''
port = 50000
connectionSevered=0

try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error:
    print 'Failed to create socket'
    sys.exit()
print '[+] Listening for connections on port '+str(port)+'.'

s.bind((host,port))
s.listen(5)         

def recvall(the_socket,timeout=2):
    global connectionSevered
    data='';          # Data found by recv
    total_data=[];    # Finally list of everything

    s.setblocking(0)  #make socket non blocking
    begin=time.time() #beginning time

    while 1:
        ready = select.select([client], [], [], .2)
        if time.time()-begin > timeout:
            print 'Timeout reached'
            #Leave loop, timer has reached its threshold
            break
        if ready[0]:
            print 'In ready loop!'
            try:
                data = client.recv(4096)    #attempt to fetch data
                if data:
                    begin=time.time()       #reset timeout timer
                    total_data.append(data) 
                    data='';
            except socket.error:
                print '[+] Lost connection to client. Printing buffer...'
                connectionSevered=1   # Let main loop know connection has errored
                pass
        time.sleep(1)
    #join all parts to make final string
    return ''.join(total_data)

client, address = s.accept()
print '[+] Client connected!'

while (connectionSevered==0): # While connection hasn't errored
    print "connectionSevered="+str(connectionSevered) # DEBUG
    recvall(s)
    response = raw_input()                  #take user input
    client.sendto(response)                   #send input
client.close(0)

Por favor, deixe-me saber se você precisar de mais informações, qualquer ajuda seria muito apreciada, eu sou muito novo para isso e ansioso para aprender.

questionAnswers(2)

yourAnswerToTheQuestion