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?
netstatmostra solo le lunghezze della coda di invio e ricezione, che non coincidono con la coda di accettazione.
man netstat | less +/Flags
netstatnon sembra mostrare Flagsaffatto per le connessioni TCP. Da un po 'di test, sembra che le connessioni siano mostrate come ESTABLISHEDin netstat, anche se provo ad aprire le connessioni a un processo che funziona, listen()ma mai accept().
SYN_RECVcomunque 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' ACKarrivo di s dagli host di connessione per completare le connessioni.
netstat.