Comportamento TCP no Mac OS vs Ubuntu

2

O processo a seguir resulta em um 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 escutando na porta 123 é roteirizado para processar o conteúdo de some_text_file. Na minha implementação do Ubuntu deste processo, o comprimento da entrada que o servidor TCP recebe é o comprimento do arquivo_flex_text. Na minha implementação OSX no entanto - é uma fração menor do comprimento ou seja. a entrada fica truncada de alguma forma.

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

Obrigado!

    
por user51327 05.10.2010 / 01:24

1 resposta

2

Sem saber o suficiente sobre a implementação, só posso supor que o seu processo na extremidade de escuta não faça um loop para recv(2) do soquete, mas apenas leia 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 de recepção 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.

    
por 05.10.2010 / 04:36