Domanda

Client chiude il socket prima, quando non c'è più dati da server, arresto connessione TCP è bene così:

FIN -->
   <-- ACK
   <-- FIN, ACK
ACK -->

Quando il server è affaccendava di invio dati:

FIN -->
    <-- ACK,PSH
RST -->

E la connessione al server viene a CLOSE_WAIT stato e appendere lì per un lungo periodo di tempo.

Qual è il problema? client connessi o il server connessi? Questo avviene Redhat5 per prese locali.

Questo articolo parlare perché è inviato "RST", ma non so il motivo per cui la connessione al server bloccato su CLOSE_WAIT, e non inviare un FIN fuori.

[EDIT] Ho ignorato le informazioni più importanti, questo accade in emulazione di rete SLiRP di QEMU. Sembra essere un problema di slirp bug per trattare con stretta connessione.

È stato utile?

Soluzione 3

Questo è un noto difetto per qemu.

Altri suggerimenti

Questo significa che ci sono dati da leggere lasciate in nel flusso, che il cliente non ha finito di leggere.

È possibile forzare fuori utilizzando l'opzione SO_LINGER. Ecco rilevanti documentazione per Linux (vedere anche l'opzione stessa, qui ), e [ecco il function2 corrispondenza] per Win32

E 'il lato server che rimanendo aperti, quindi è sul lato server si può provare a disabilitare SO_LINGER.

Può significare che il server non ha chiuso il socket. Si può facilmente dire questo utilizzando "lsof" per elencare i descrittori di file aperti da quel processo che includerà socket TCP. La correzione è quello di avere il processo di chiudere sempre la presa quando è finito (anche in caso di errore, ecc)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top