Tengo una hipótesis: a veces las conexiones TCP llegan más rápido que mi servidor accept(). Hacen cola hasta que la cola se desborda y luego hay problemas.
¿Cómo puedo confirmar que esto está sucediendo?
¿Puedo monitorear la longitud de la cola de aceptación o el número de desbordamientos? ¿Hay un mostrador expuesto en alguna parte?
netstatsolo muestra las longitudes de la cola de envío y recepción, que no es lo mismo que la cola de aceptación.
man netstat | less +/Flags
netstat, no parece mostrarse Flagsen absoluto para las conexiones TCP. A partir de una pequeña prueba, parece que las conexiones se muestran como ESTABLISHEDen netstat, incluso si trato de abrir conexiones a un proceso que lo hace listen()pero nunca accept().
SYN_RECVembargo, para TCP podría contar . No hay otra cola más allá de eso. Supongo que se le puede decir al kernel de alguna manera que registre los paquetes descartados debido a demasiadas conexiones entreabiertas, pero han pasado más de 10 años desde que examiné las redes con Linux, así que no tengo idea de cómo hacerlo. En una nota al margen: no está esperando accept()que haga su trabajo, está esperando ACKque lleguen s de los hosts de conexión para completar las conexiones.
netstat.