Comportamiento de TCP en Mac OS frente a Ubuntu

Comportamiento de TCP en Mac OS frente a Ubuntu

El siguiente proceso da como resultado un comportamiento diferente en Mac OS y Ubutu:

cat some_text_file | xargs a_shell_script.sh

a_shell_script.sh

#!/bin/bash
echo "$@" | telnet 127.0.0.1 123
exit 0

El servidor TCP que escucha en el puerto 123 está programado para procesar el contenido de algún_archivo_de_texto. En mi implementación de Ubuntu de este proceso, la longitud de la entrada que recibe el servidor TCP es la longitud de some_text_file. Sin embargo, en mi implementación de OSX, es una fracción más pequeña de la longitud, es decir. la entrada se trunca de alguna manera.

Nota: Hasta donde yo sé, este no es un problema de xargs. El número de argumentos ( $#) disponibles a_shell_script.shes igual en ambas implementaciones.

¡Gracias!

Respuesta1

Sin saber lo suficiente sobre la implementación, solo puedo asumir que su proceso en el extremo de escucha no realiza un bucle recv(2)desde el socket, sino que solo lee una vez. El hecho de que obtengas todo a la vez en Ubuntu y no en OS X probablemente tenga que ver con la implementación de la pila TCP en los dos sistemas, pero no es algo que deba importar; en cambio, el código en el extremo receptor debe sondear el socket y leer los datos disponibles.

Consulte las llamadas socket(2)y recv(2), y tal vez publique algún código si cree que sería útil.

información relacionada