TCP-Verhalten unter Mac OS im Vergleich zu Ubuntu

TCP-Verhalten unter Mac OS im Vergleich zu Ubuntu

Der folgende Vorgang führt zu unterschiedlichem Verhalten unter Mac OS und Ubuntu:

cat some_text_file | xargs a_shell_script.sh

a_shell_script.sh

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

Der TCP-Server, der auf Port 123 lauscht, ist so programmiert, dass er den Inhalt von some_text_file verarbeitet. Bei meiner Ubuntu-Implementierung dieses Prozesses entspricht die Länge der Eingabe, die der TCP-Server empfängt, der Länge von some_text_file. Bei meiner OSX-Implementierung ist es jedoch ein kleinerer Bruchteil der Länge, d. h. die Eingabe wird irgendwie abgeschnitten.

Hinweis: Soweit ich das beurteilen kann, handelt es sich hierbei nicht um ein xargs-Problem. Die Anzahl der $#verfügbaren args () a_shell_script.shist in beiden Implementierungen gleich.

Danke schön!

Antwort1

Ohne genug über die Implementierung zu wissen, kann ich nur annehmen, dass Ihr Prozess auf der Empfangsseite nicht recv(2)zum Socket zurückläuft, sondern nur einmal liest. Die Tatsache, dass Sie unter Ubuntu alles auf einmal erhalten und unter OS X nicht, hat wahrscheinlich mit der TCP-Stack-Implementierung auf den beiden Systemen zu tun, aber das sollte keine Rolle spielen; stattdessen sollte der Code auf der Empfangsseite den Socket abfragen und Daten lesen, sobald sie verfügbar sind.

Sehen Sie sich die socket(2)und recv(2)Anrufe an und posten Sie vielleicht etwas Code, wenn Sie denken, dass es helfen würde.

verwandte Informationen