关于服务端开发的整理

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
服务程序被愤怒的内核杀掉

  

posted @   方东信  阅读(326)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示