sto imparando a utilizzare SO_SNDTIMEO e SO_RCVTIMEO per controllare il timeout. È facile da usare con leggere socket. Ma quando voglio verificare timeout, restituisce sempre correttamente. Ecco quello che ho fatto: (tutti in modalità di blocco)come simulare un caso anomalo per la programmazione socket/tcp in linux, come terminare un lato della connessione?
- vicino il cliente leggere presa e uscire prima di server di avviare scrittura
- terminare il client prima di server iniziare scrittura
- scollegare il cavo di server dopo accetta ma prima di scrivere
beh, sembra che tutti questi casi scrivano appena restituiti con successo. Penso che la ragione dovrebbe essere che la porta è la risorsa gestita da os, e sul lato client, dopo che il programma è andato, la connessione TCP mostra ancora lo stato FIN_WAIT2.
quindi, non v'è alcun modo conveniente per simulare alcuni casi che scrittura può ricevere errori come EPIPE, EAGAIN?
grazie per le vostre informazioni e avrò una prova. Per ** leggere **, ho effettivamente ottenuto EAGAIN e EWOULDBLOCK in modalità di blocco quando è scaduto. Presumo solo che funzioni allo stesso modo quando ** scrivi ** timeout. – xgwang