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)調用,如果您認為有幫助,也許可以發布一些程式碼。

相關內容