RSH 延迟关闭 stderr 套接字?

RSH 延迟关闭 stderr 套接字?

环境: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 stderr 端口(来自使用wireshark 进行监控)。

大约一分钟后,服务器上的套接字将关闭,并且可以建立新的连接。

因此,客户端或服务器似乎无法正确关闭这些套接字,并且它们只是超时。

这是 rsh 中的错误吗?

有办法解决这个问题吗?我可以看到BSD的rsh有一个--no-stderr选项,但Linux似乎没有。

答案1

我以前遇到过这个问题...TIME_WAIT 是 TCP/IP 的一个产物,所以你只能坚持使用它。它可以通过 /proc 进行调整(参见服务器故障 23385)但更好的方法是打开一个只要需要就可以工作的持久套接字的解决方案。

  生成行数 | ssh myhost '同时读取行;执行 echo ":$line";完毕;'

通过这种方式,您可以让一个连接根据客户端向服务器发送的内容执行许多操作。

相关内容