Estoy trabajando en un entorno de Linux incrustado.conexión de cliente telnet deja de recibir datos, el servidor todavía está enviando
lanza un daemon de telnet en el inicio que mira en un puerto en particular y lanza un programa cuando se recibe una conexión.
es decir
telnetd -l /usr/local/bin/PROGA -p 1234
PROGA - salida voluntad algunos datos a intervalos irregulares. Cuando no está emitiendo datos, cada X período de tiempo envía una cadena tipo 'latido' para indicarle al cliente que todavía estamos activos, es decir, "heartbeat \ r \ n"
Después de un período aleatorio de tiempo, el cliente (usar una versión para Linux de telnet, lanzado por: telnet xxx.xxx.xxx.xxx 1234)
dejará de recibir el 'latido del corazón \ r \ n'
los datos que el cliente ve:
heartbeat
heartbeat
heartbeat
...
heartbeat
[nothing, should have received heartbeat]
[nothing forever]
latidos del corazón se envía:
result = printf("%s", heartbeat);
comprobación de resultado, siempre es la longitud de heartbeat
. El registro en syslog nos muestra que el printf()
está ejecutando con éxito en los intervalos adecuados
ya he añadido en un tcdrain y fflush el que tanto éxito regresar, pero no parecen ayudar a la situación.
Cualquier ayuda sería apreciada.
** UDPATE: obtuve una captura de wireshark desde el servidor. Muy claramente, el latido del corazón se envía continuamente. Sin Hicups, sin retrasos. Encontré algo interesante en el cliente sin embargo. El cliente en este caso de prueba (telnet en Ubuntu 9.04) parece dejar de recibir latidos repentinamente (como se describe arriba). Wireshark confirma esto, gran pausa en paquetes. Bueno, una vez que el cliente dejó de recibir el latido del corazón, presionar cualquier tecla (en el cliente) parece desencadenar una descarga de datos desde el búfer del cliente (todos los latidos del corazón). Wireshark en el cliente también muestra esta gran cantidad de datos, todo en un solo paquete.
Lamentablemente, realmente no sé lo que esto significa. Es esto un modo de encendido/apagado de línea? Las terminaciones de línea (\ r \ n) están llegando muy claramente.
** Actualización 2: al ejecutar netcat en lugar de telnetd, el problema no es reproducible.
¿cómo se ven las otras cadenas que envía? si envía un byte de 255, necesita ser escapado ... – Spudd86
No creo que las otras cadenas sean relevantes, ya que este error/problema puede reproducirse enviando solo la cadena 'heartbeat' una y otra vez – Tree77