Attualmente sto mantenendo alcuni software per server Web e ho bisogno di eseguire molte operazioni di I/O. Le chiamate read()
, , close()
e shutdown()
, se utilizzate su un socket, possono talvolta generare un errore ENOTCONN
. Cosa significa esattamente questo errore? Quali sono le condizioni che l'avrebbero innescata? Non riesco mai a riprodurlo localmente ma ci sono utenti che possono farlo.Che cosa causa l'errore ENOTCONN?
In questo momento ho appena ignorato ENOTCONN
quando generato da close()
e shutdown()
perché sembra innocuo, ma non ne sono del tutto sicuro.
EDIT:
- Sono assolutamente sicuro che la chiamata è riuscita
connect()
. Controllo il suo valore di ritorno. ENOTCONN
viene generato più spesso daclose()
eshutdown()
. Ho visto molto raramente un aumento diread()
ewrite()
ENOTCONN
.
Quale sistema operativo? Sto rintracciando un problema simile al lavoro su un vecchio sistema Solaris 10. Grazie. – Nemo
Per lo più FreeBSD.Nel frattempo ho scoperto che ci sono bug del kernel in FreeBSD che potrebbero causare close() e shutdown() per restituire ENOTCONN erroneamente quando si ha a che fare con socket di dominio Unix. Solaris ha anche vari bug del kernel w.r.t. Socket di dominio Unix, anche se ho solo osservato bug in connect(). – Hongli