Ho un'ipotesi: a volte le connessioni TCP arrivano più velocemente di quanto il mio server possa accept()
farle. Si mettono in coda fino a quando la coda non trabocca e quindi non ci sono problemi.
Come posso confermare che ciò sta accadendo?
Posso monitorare la lunghezza della coda di accettazione o il numero di overflow? C'è un bancone esposto da qualche parte?
netstat
mostra solo le lunghezze della coda di invio e ricezione, che non coincidono con la coda di accettazione.
man netstat | less +/Flags
netstat
non sembra mostrare Flags
affatto per le connessioni TCP. Da un po 'di test, sembra che le connessioni siano mostrate come ESTABLISHED
in netstat
, anche se provo ad aprire le connessioni a un processo che funziona, listen()
ma mai accept()
.
SYN_RECV
comunque contare . Non c'è altra coda oltre quella. Suppongo che al kernel possa essere detto in qualche modo di registrare i pacchetti rilasciati a causa di troppe connessioni semiaperte, ma sono passati più di 10 anni da quando ho guardato alla rete con Linux, quindi non ho idea di come farlo. Nota a margine: non stai aspettando accept()
di fare il suo lavoro, stai aspettando l' ACK
arrivo di s dagli host di connessione per completare le connessioni.
netstat
.