Estoy escribiendo un servidor HTTP simple y aprendiendo sobre TIME_WAIT. ¿Cómo manejan los servidores web reales en ambientes pesados las solicitudes de miles de usuarios sin que todos los sockets se bloqueen en TIME_WAIT después de que se maneja una solicitud? (No preguntar sobre keep-alive - eso ayudaría a un solo cliente, pero no a miles de clientes diferentes).¿Cómo evitan los servidores web TIME_WAIT?
He leído que intenta hacer que el cliente cierre primero, para que todos los TIME_WAIT se distribuyan entre todos los clientes, en lugar de concentrarse en el servidor.
¿Cómo se hace esto? En algún momento, el servidor tiene que llamar close/closesocket.
Entonces, ¿el servidor simplemente espera y espera a que el cliente cierre? Creo que en algún momento querría desconectar y cerrar la conexión. – DougN
Lo que me hace pensar en otra pregunta :) ¿Crees que un servidor web real (IIS/Apache?) Simplemente llama a seleccionar en el socket con un tiempo de espera de 5 (?) Segundos, suponiendo que debe haber suficiente tiempo para que el cliente desconectar (y dejar de seleccionar devolver con un socket de error)? – DougN
Si restablece la conexión en lugar de cerrarla, tampoco terminará en TIME_WAIT. Por lo tanto, si desea agregar un tiempo de espera para las conexiones inactivas, las cerraría primero apagando el retardo y luego emitiendo el cierre. Esto enviaría un RST y no terminarías en TIME_WAIT. –