Sto scrivendo un modulo Python che sta comunicando con un programma go tramite socket unix. Il client (il modulo python) scrive i dati sul socket e il server li consuma.Presa Python chiusa prima che tutti i dati siano stati consumati dal telecomando
# Simplified version of the code used
outputStream = socket.socket(socketfamily, sockettype, protocol)
outputStream.connect(socketaddress)
outputStream.setblocking(True)
outputStream.sendall(message)
....
outputStream.close()
Il mio problema è che il cliente Python tende a finire e chiudere il socket prima che i dati sono stati effettivamente letto dal server che porta ad un "tubo rotto, ripristinato il collegamento dal pari" sul lato server. Qualsiasi cosa faccia, per il codice Python tutto è stato inviato e così le chiamate a send() sendall() select() sono tutti di successo ...
Grazie in anticipo
EDIT: non posso usare arresto a causa di Mac OS
EDIT2: ho anche provato a rimuovere il timeout e chiamare setblocking (vero), ma non cambia nulla
Edit3: Dopo pronto questo problema http://bugs.python.org/issue6774 sembra che la documentazione non è necessaria spaventoso così ho ripristinato lo spegnimento ma ho ancora lo stesso problema:
# Simplified version of the code used
outputStream = socket.socket(socketfamily, sockettype, protocol)
outputStream.connect(socketaddress)
outputStream.settimeout(5)
outputStream.sendall(message)
....
outputStream.shutdown(socket.SHUT_WR)
outputStream.close()