1.当recv返回值为0是表示对方已经正常(msdn说是完美的)的断开连接.
2.当recv返回socket_error时,说明对方已经断开连接,但是可能是非正常断开(断网或者客户端进程结束).
服务端Socket如何释放客户端连接的资源 0 悬赏园豆:20 [待解决问题] 浏览: 682次 一个请求/应答模式的Socket应用,作为服务端接收客户端的请求数据,然后响应客户端,采用异步监听和异步接收方式。现在的问题是如何判断一个客户端是否已经关闭了,还有就是如何释放客户端连接请求过来的Socket所占用的资源。因为在运行的时候服务端Socket的进程内存占用一直在飙升,到最后就是导致服务挂掉。求帮助,求解答。。。 .NET技术.NET Framework john chen | 初学一级 | 园豆:180 提问于:2011-11-08 01:43 < > 找优秀程序员,就在博客园 收藏 所有回答(2) 0 其实在客户端关闭的时候,服务端会一直收到一个空字节,然后服务端就一直死在那里了,这个时候就要在服务端做一个判断了,如果收到空字节时就应该把与客户端连接的套接字关闭,这么就没什么问题了; 释放客户端请求的资源就看你用到了什么了就在上面那个判断里面添加释放的代码
补充一点 最好显式调用shudown(fd, flag) close有时候会意外(只有最后一次CLOSE才调用shutdown) 不然的话很容易发生FIN_WAIT1, FIN_WAIT2还有CLOSE_WAIT的 我曾经搞过10000个CLOSE_WAIT 服务程序被愤怒的内核杀掉