EPIPE (errno 32)

errno 32

LINUX

Messaggio ufficiale (come appare sullo schermo): Broken pipe

Cercato anche come: Broken pipe, errno 32, EPIPE broken pipe, write EPIPE

Terminale Linux che esegue strace con la chiamata di sistema non riuscita e l'errno evidenziati
errno di Linux: individua la chiamata di sistema che fallisce prima di modificare qualsiasi cosa.

Che cosa significa

EPIPE, «Broken pipe» (errno 32), significa che un programma ha scritto su una pipe o un socket il cui lato di lettura è già chiuso. Le pipeline di shell lo incontrano quando il comando successivo termina in anticipo (ad esempio 'head'), mentre i server lo vedono quando un client si disconnette prima dell'invio della risposta.

Si applica a: Linux, macOS (errno BSD), WSL, Container Docker

Come risolvere EPIPE (errno 32)

  1. Nelle pipeline di shell, una broken pipe dopo 'head' o 'grep -q' è prevista e di solito innocua
  2. Per le disconnessioni SSH con «Broken pipe», aggiungi 'ServerAliveInterval 60' a ~/.ssh/config per mantenere vive le sessioni inattive
  3. Nei server, gestisci EPIPE come una normale disconnessione del client: smetti di scrivere e chiudi la connessione
  4. In Python, intercetta BrokenPipeError; in Node.js gestisci gli eventi 'error' sugli stream per evitare crash
  5. Se EPIPE avviene su una connessione verso un database o un upstream, controlla i timeout di inattività di quel lato e attiva i keep-alive o la logica di riconnessione
  6. Se i programmi terminano in silenzio, ricorda che SIGPIPE termina i processi per impostazione predefinita; ignoralo ('signal(SIGPIPE, SIG_IGN)') e controlla invece gli errori di scrittura

Perché succede

Scrivere su una pipe o un socket di tipo stream senza lettore genera SIGPIPE ed EPIPE. Le cause abituali sono lettori che terminano in anticipo, client che si disconnettono, timeout sul lato remoto e middlebox di rete che chiudono le connessioni inattive.

Domande frequenti

Perché SSH dice «Broken pipe»?

La connessione era inattiva o la rete è caduta, e il server o un router l'ha chiusa. Le impostazioni keep-alive nella configurazione SSH evitano la maggior parte dei casi.

Errori correlati

Fonte: Linux kernel errno.h · soluzioni scritte e verificate dalla redazione (vedi la nostra politica editoriale)

Ultimo aggiornamento: