Pregunta

Cliente cierra el socket primero, cuando no hay muchos datos desde un servidor, apagado conexión TCP está bien como:

FIN -->
   <-- ACK
   <-- FIN, ACK
ACK -->

Cuando el servidor está busying envío de datos:

FIN -->
    <-- ACK,PSH
RST -->

Y la conexión con el servidor trata de CLOSE_WAIT estado y colgar en allí durante mucho tiempo.

¿Cuál es el problema aquí? cliente o servidor relacionadas relacionadas? Esto ocurre en Redhat5 para sockets locales.

Este artículo hablar de por qué "RST" se envía, pero no sé por qué la conexión del servidor atascado en CLOSE_WAIT, y no envía un FIN a cabo.

[EDIT] no hice caso de la información más importante, esto sucede en la emulación de red slirp de qemu. Parece ser un problema de fallo slirp para tratar con estrecha conexión.

¿Fue útil?

Solución 3

Este es un conocido defecto para qemu.

Otros consejos

Esto significa que hay datos no leídos que quedan en en la corriente, que el cliente no ha terminado de leer.

Puede forzarlo fuera mediante la opción SO_LINGER. Aquí está documentación pertinente para Linux (vea también la opción sí, aquí ), y [aquí está la function2 coincidente] para Win32

Es el lado servidor que permanecen abiertas, por lo que es en el lado del servidor puede intentar deshabilitar SO_LINGER.

Esto puede significar que el servidor no se ha cerrado el zócalo. Se puede deducir fácilmente mediante el uso de "lsof" para listar los descriptores de ficheros abiertos por ese proceso que incluirá sockets TCP. La solución es hacer que el proceso de cierre siempre la toma de corriente cuando esté terminado (incluso en casos de error, etc.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top