[Python] BrokenPipeError: [Errno 32] Broken pipe

Alessandro Pg alepg a hotmail.com
Dom 2 Nov 2014 20:19:30 CET


Ciao Enrico,
innanzitutto ti ringrazio infinitamente per la tua risposta.
Premetto che a puro titolo didattico mi dedico a questa attività e quindi perdonami per la mia inesperienza in materia. Mi sono appassionato a Python e provo ad esercitarmi, come avrai notato, con scarso successo :-).
Ho seguito il tuo prezioso suggerimento e ho tentato di loggare il traffico con tcpdump che ti allego.
Come potrai notare dopo una lunga serie di push il server (199.16.156.72)  termina la connessione (FIN) e lancia un reset (RST).
L'immagine che sto tentando di postare è di 178 KB. In ogni caso l'errore si verifica anche per immagini di più piccole dimensioni.
Se in ambiente Windows non si verifica alcun errore ho ipotizzato che in Unix ci possa essere qualche parametro di sistema da impostare.
Mi sai fornire qualche suggerimento?
Ancora grazie per la tua gentile disponibilità.
 
Ciao,
Alessandro

 ...
19:21:53.180764 IP 10.0.0.2.25232 > ns1.p34.dynect.net.domain:  30001 [1au] AAAA? api.twitter.com. (44)
19:21:53.225168 IP ns1.p34.dynect.net.domain > 10.0.0.2.25232:  30001*- 0/1/1 (116)
19:21:53.227612 IP 10.0.0.2.14642 > ns3.p34.dynect.net.domain:  32103 [1au] A? api.twitter.com. (44)
19:21:53.299637 IP ns3.p34.dynect.net.domain > 10.0.0.2.14642:  32103*- 4/4/1 A 199.16.156.40,[|domain]
19:21:53.305391 IP 10.0.0.2.52772 > 199.16.156.72.https: S 1062698777:1062698777(0) win 5840 <mss 1460,sackOK,timestamp 350447671 0,nop,wscale 7>
19:21:53.461770 IP 199.16.156.72.https > 10.0.0.2.52772: S 898493203:898493203(0) ack 1062698778 win 14480 <mss 1440,sackOK,timestamp 179084769 350447671,nop,wscale 8>
19:21:53.461802 IP 10.0.0.2.52772 > 199.16.156.72.https: . ack 1 win 46 <nop,nop,timestamp 350447827 179084769>
19:21:53.462067 IP 10.0.0.2.52772 > 199.16.156.72.https: P 1:73(72) ack 1 win 46 <nop,nop,timestamp 350447827 179084769>
19:21:53.593662 IP 199.16.156.72.https > 10.0.0.2.52772: . ack 73 win 57 <nop,nop,timestamp 179084900 350447827>
19:21:53.594277 IP 199.16.156.72.https > 10.0.0.2.52772: . 1:1401(1400) ack 73 win 57 <nop,nop,timestamp 179084900 350447827>
19:21:53.594773 IP 199.16.156.72.https > 10.0.0.2.52772: . 1401:2801(1400) ack 73 win 57 <nop,nop,timestamp 179084900 350447827>
19:21:53.595596 IP 199.16.156.72.https > 10.0.0.2.52772: P 2801:2936(135) ack 73 win 57 <nop,nop,timestamp 179084900 350447827>
19:21:53.596048 IP 10.0.0.2.52772 > 199.16.156.72.https: . ack 1401 win 69 <nop,nop,timestamp 350447961 179084900>
19:21:53.596056 IP 10.0.0.2.52772 > 199.16.156.72.https: . ack 2801 win 91 <nop,nop,timestamp 350447961 179084900>
19:21:53.596060 IP 10.0.0.2.52772 > 199.16.156.72.https: . ack 2936 win 113 <nop,nop,timestamp 350447961 179084900>
19:21:53.596757 IP 10.0.0.2.52772 > 199.16.156.72.https: P 73:399(326) ack 2936 win 113 <nop,nop,timestamp 350447962 179084900>
...
19:21:56.422471 IP 10.0.0.2.52772 > 199.16.156.72.https: P 106821:108249(1428) ack 2995 win 113 <nop,nop,timestamp 350450788 179087730>
19:21:56.422476 IP 10.0.0.2.52772 > 199.16.156.72.https: . 108249:109677(1428) ack 2995 win 113 <nop,nop,timestamp 350450788 179087730>
19:21:56.422754 IP 199.16.156.72.https > 10.0.0.2.52772: P 2995:3176(181) ack 99681 win 59 <nop,nop,timestamp 179087730 350450548>
19:21:56.423218 IP 199.16.156.72.https > 10.0.0.2.52772: P 3176:3213(37) ack 99681 win 61 <nop,nop,timestamp 179087730 350450548>
19:21:56.424783 IP 199.16.156.72.https > 10.0.0.2.52772: F 3213:3213(0) ack 99681 win 61 <nop,nop,timestamp 179087730 350450548>
19:21:56.430299 IP 199.16.156.72.https > 10.0.0.2.52772: R 898496198:898496198(0) win 0
19:21:56.441472 IP 199.16.156.72.https > 10.0.0.2.52772: R 898496198:898496198(0) win 0
...
 
From: enrico.franchi a gmail.com
Date: Sun, 2 Nov 2014 16:03:55 +0000
To: python a lists.python.it
Subject: Re: [Python] BrokenPipeError: [Errno 32] Broken pipe



On Sun, Nov 2, 2014 at 11:19 AM, Alessandro Pg <alepg a hotmail.com> wrote:
 Mi sto servendo della libreria Python Twitter Tools (PTT) sviluppata da Mike Verdone (http://mike.verdone.ca/twitter/).
Il problema nasce nel momento in cui tento di inviare un messaggio contenente un'immagine da un client Unix (Centos). Se il tentativo avviene da un client Windows nessun problema.


Allora, detto fra noi, il codice che hai postato... diciamo che io non vorrei doverlo mantenere, ecco.  Il messaggio di errore è il seguente:
BrokenPipeError: [Errno 32] Broken pipe
Spero tanto che mi possiate essere d'aiuto. 
Io in quel contesto mi aspetto un BrokenPipeError se il server ti spara indietro un RST e tu continui a scrivere sul socket.Senza uno stack trace completo faccio fatica a capire dove e perche' e' successo...
Ho anche aperto la libreria che dici di usare (in prima istanza ero insospettito dallo sparargli dentro il buffer che hai ottenuto con .read(), ma apparentemente la libreria ci fa sopra da sola un base64, che altrimenti ti avrei detto di fare a mano.
Sempre a naso, mi sembra improbabile che sia una questione di Linux vs. Windows... io valuterei il fatto che per qualche motivo i server di twitter ti chiudono nei denti la connessione sulla linux box (non ho idea del perche'), risponendo al tuo SYN direttamente con un RST; tcpdump e' tuo amico. Oppure potrebbero farlo in un secondo momento, perche' pensano che tu abbia finito...
Boh, ci vorrebbero piu' dettagli.
-- 
 .
..: -enrico-


_______________________________________________
Python mailing list
Python a lists.python.it
http://lists.python.it/mailman/listinfo/python 		 	   		  
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20141102/faf0d02b/attachment-0001.html>


Maggiori informazioni sulla lista Python