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?
netstatne 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
netstatil ne semble pas du tout s'afficher Flagspour les connexions TCP. D'après un petit test, il semble que les connexions soient affichées comme ESTABLISHEDdans 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 ACKs arrivent des hôtes se connectant pour terminer les connexions.
netstat.