Remote

RSH延遲關閉stderr套接字?

  • September 17, 2016

環境:CentOS 6.6

執行這個簡單的測試時(來自myclient):

while true; do rsh myserver "echo OK"; done

大約 500 次迭代後,伺服器的埠用完了。

netstat -anp伺服器上顯示:

tcp        0      0 myserver:1008              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:975               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:998               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:991               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1007              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1000              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:990               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:979               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1003              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:988               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:984               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1002              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:997               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1019              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:995               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:993               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1004              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1017              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1013              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1011              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1009              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:994               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:987               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:986               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1012              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1010              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1014              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:996               myclient:922              TIME_WAIT   -

922是 RSH 標準錯誤埠(來自使用 wireshark 監控)。

大約一分鐘後,伺服器上的套接字關閉,可以建立新的連接。

因此,客戶端或伺服器似乎無法正確關閉這些套接字,它們只是超時。

這是 rsh 中的錯誤嗎?

有什麼想法可以解決這個問題嗎?我可以看到 BSD 的 rsh 有一個--no-stderr選項,但 Linux 似乎沒有。

在我的生活中遇到過這個…… TIME_WAIT 是 TCP/IP 的產物,所以你被它困住了。它可以通過 /proc 進行調整(參見serverfault 23385),但更好的方法是打開一個持久性套接字的解決方案,只要需要就可以工作。

generate_lots_of_lines | ssh myhost '同時讀取行;做迴聲“:$行”;完畢;'

這樣,您可以讓一個連接根據客戶端向伺服器發送的內容執行許多操作。

引用自:https://unix.stackexchange.com/questions/265474