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 上却不能,这可能与这两个系统上的 TCP 堆栈实现有关,但这不是什么大问题;相反,接收端的代码应该轮询套接字并读取可用的数据。

检查socket(2)recv(2)调用,如果您认为有帮助的话,也许可以发布一些代码。

相关内容