Mac OS と Ubuntu での TCP の動作

Mac OS と Ubuntu での TCP の動作

次のプロセスにより、Mac OS と 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

ポート 123 でリッスンしている TCP サーバーは、some_text_file の内容を処理するようにスクリプト化されています。このプロセスの私の Ubuntu 実装では、TCP サーバーが受信する入力の長さは some_text_file の長さです。ただし、私の OSX 実装では、長さのより小さな部分、つまり入力が何らかの理由で切り捨てられます。

注: 私の知る限り、これは xargs の問題ではありません。$#使用可能な args ( )の数a_shell_script.shは、両方の実装で同じです。

ありがとう!

答え1

実装について十分な知識がないため、リスニング側のプロセスはrecv(2)ソケットからループせず、一度だけ読み取るとしか考えられません。Ubuntu では一度にすべてを取得できて、OS X では取得できないのは、おそらく 2 つのシステムの TCP スタックの実装に関係していますが、これは問題ではありません。代わりに、受信側のコードはソケットをポーリングし、利用可能なデータを読み取る必要があります。

socket(2)および呼び出しを確認しrecv(2)、役立つと思われる場合はコードを投稿してください。

関連情報