J'ai une hypothèse: parfois les connexions TCP arrivent plus vite que mon serveur ne peut accept()
les faire. Ils font la queue jusqu'à ce que la file d'attente déborde, puis il y a des problèmes.
Comment puis-je confirmer que cela se produit?
Puis-je surveiller la longueur de la file d'attente d'acceptation ou le nombre de débordements? Y a-t-il un comptoir exposé quelque part?
netstat
ne montre que les longueurs de file d'attente d'envoi et de réception, ce qui n'est pas la même que la file d'attente d'acceptation.
man netstat | less +/Flags
netstat
il ne semble pas du tout s'afficher Flags
pour les connexions TCP. D'après un petit test, il semble que les connexions soient affichées comme ESTABLISHED
dans netstat
, même si j'essaie d'ouvrir des connexions à un processus qui le fait listen()
mais jamais accept()
.
SYN_RECV
. Il n'y a pas d'autre file d'attente au-delà de cela. Je suppose que le noyau peut être informé d'une manière ou d'une autre de journaliser les paquets perdus en raison de trop de connexions semi-ouvertes, mais il y a plus de 10 ans depuis que j'ai envisagé la mise en réseau avec Linux, donc je ne sais pas comment faire. Sur une note latérale: vous n'attendez pas pour accept()
faire son travail, vous attendez que les ACK
s arrivent des hôtes se connectant pour terminer les connexions.
netstat
.