Ich habe eine Hypothese: Manchmal kommen TCP-Verbindungen schneller an, als mein Server es kann accept()
. Sie stehen in der Warteschlange, bis die Warteschlange überläuft, und dann gibt es Probleme.
Wie kann ich bestätigen, dass dies geschieht?
Kann ich die Länge der Akzeptanzwarteschlange oder die Anzahl der Überläufe überwachen? Gibt es irgendwo einen Zähler?
netstat
nur die Sende- und Empfangswarteschlangenlängen angezeigt, die nicht mit der Akzeptanzwarteschlange übereinstimmen.
man netstat | less +/Flags
netstat
scheint sie Flags
für TCP-Verbindungen überhaupt nicht angezeigt zu werden . Nach einigem Testen sieht es so aus, als würden die Verbindungen wie ESTABLISHED
in angezeigt netstat
, auch wenn ich versuche, Verbindungen zu einem Prozess zu öffnen, der dies tut, listen()
aber niemals accept()
.
SYN_RECV
. Darüber hinaus gibt es keine andere Warteschlange. Ich nehme an, der Kernel kann aufgrund zu vieler halb offener Verbindungen irgendwie angewiesen werden, verworfene Pakete zu protokollieren, aber es sind mehr als 10 Jahre vergangen, seit ich mich mit der Vernetzung mit Linux befasst habe, daher habe ich keine Ahnung, wie das geht. Nebenbei bemerkt: Sie warten nicht darauf accept()
, dass die Aufgabe ACK
erledigt wird, sondern darauf , dass s von den Verbindungshosts eintreffen, um die Verbindungen herzustellen.
netstat
.