日期:2014-05-16  浏览次数:20737 次

TCP长连接出现Too many open files!!!!急急急!!!!
为实现TCP长连接:当客户端和服务端断开连接后 客户端再主动发起TCP链接 直到成功为止!这边做了一个测试,用网络调试助手作为TCP服务端,开发板作为客户端,服务端一直不开启,就是没有进行监听,客户端不间断的向指定端口发起链接请求,每次肯定都是不成功的,仍然对返回值进行close()操作,经过一定次数的请求后(1024次),客户端打印出Too many open files,后面及时服务端进行监听,客户端也无法连接上!除非客户端重启(是客户端重启不是服务端);在电脑cmd处输入netstat -na 发现大量端口处于close_wait状态!
麻烦高手指点 如何处理这种情况

------解决方案--------------------
close_wait 是server端的被动关闭的开始状态,只有调用close后才会转为last_ack,很显然server遗留大量close_wait的描述符,表示均没有调用close。

另外,你描述的"仍然对返回值进行close()操作",是指客户端connect失败后对之前socket()的返回值调用close()吗?

------解决方案--------------------
优化一下tcp参数,快速回收close_wait的端口吧,与程序没什么关系。
------解决方案--------------------
应该是太多了半关闭状态的链接了吧!
设置下linger参数!
------解决方案--------------------
半关闭状态

设置 linger 或直接对套接字进行 shutdown 操作