Comportamento TCP no Mac OS vs Ubuntu

Comportamento TCP no Mac OS vs Ubuntu

O processo a seguir resulta em comportamento diferente no Mac OS e no 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

O servidor TCP que escuta na porta 123 está programado para processar o conteúdo de some_text_file. Na minha implementação deste processo no Ubuntu, o comprimento da entrada que o servidor TCP recebe é o comprimento do some_text_file. No entanto, na minha implementação OSX - é uma fração menor do comprimento, ou seja. a entrada fica truncada de alguma forma.

Nota: Este não é um problema de xargs, pelo que posso dizer. O número de argumentos ( $#) disponíveis a_shell_script.shé igual em ambas as implementações.

Obrigado!

Responder1

Sem saber o suficiente sobre a implementação, só posso assumir que o seu processo na extremidade de escuta não faz loop recv(2)do soquete, mas lê apenas uma vez. O fato de você obter tudo de uma vez no Ubuntu e não no OS X provavelmente tem a ver com a implementação da pilha TCP nos dois sistemas, mas não é algo que deva importar; em vez disso, o código na extremidade receptora deve pesquisar o soquete e ler os dados conforme disponíveis.

Confira as chamadas socket(2)e recv(2)e talvez poste algum código se achar que isso ajudaria.

informação relacionada