免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3481 | 回复: 11
打印 上一主题 下一主题

[C] 如何清理掉服务端TCP资源 [复制链接]

论坛徽章:
5
未羊
日期:2014-08-07 15:42:10双子座
日期:2014-09-23 15:42:172015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:55:282022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-02-25 11:09 |只看该作者 |倒序浏览
由于客户端不稳定,随时都重启,这样的话,不会与服务器端优雅的四次挥手;问题来了,服务器端出现了大量的established空的链接;这该怎么办?网上查了一下资料,好像都没有一个理解的解决办法;(服务器端系统是win2003)

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
2 [报告]
发表于 2015-02-25 11:18 |只看该作者
服务端加心跳检测与客户端的连接,没有回应的主动close,等两个MSL时间后应该就会释放掉了

论坛徽章:
5
未羊
日期:2014-08-07 15:42:10双子座
日期:2014-09-23 15:42:172015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:55:282022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32
3 [报告]
发表于 2015-02-25 11:26 |只看该作者
回复 2# hellioncu


    查看了一些资料,说采用保活机制(keepalive),说是要用wsaioctl,setsocketopt等函数,还要设置注册表等,看了后感觉云里雾里;

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
4 [报告]
发表于 2015-02-25 11:29 |只看该作者
光速 发表于 2015-02-25 11:26
回复 2# hellioncu


应用层自己加心跳,别用那玩意

论坛徽章:
5
未羊
日期:2014-08-07 15:42:10双子座
日期:2014-09-23 15:42:172015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:55:282022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32
5 [报告]
发表于 2015-02-25 11:36 |只看该作者
回复 4# hellioncu


    我现在在服务器端采用这样的机制:就是超过一定的时间后,客户端还没有给服务器传递数据,我就在服务器端closesocket();但是这样的效果还是不行,时间久了,服务器端就出现大量的空地established;这好像说明了closesocket根本就没有起到作用?

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
6 [报告]
发表于 2015-02-25 11:41 |只看该作者
光速 发表于 2015-02-25 11:36
回复 4# hellioncu


close了之后应该是TIME_WAIT 状态,你判断下返回值,再检查下代码逻辑有没有漏close的

论坛徽章:
5
未羊
日期:2014-08-07 15:42:10双子座
日期:2014-09-23 15:42:172015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:55:282022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32
7 [报告]
发表于 2015-02-25 13:21 |只看该作者
hellioncu 发表于 2015-02-25 11:41
close了之后应该是TIME_WAIT 状态,你判断下返回值,再检查下代码逻辑有没有漏close的

如果网络没有问题的话,close之后应该是TIME_WAIT 状态,但是由于网络问题或者客户端不稳定等因素导致没有正常的四次挥手,结果就不会出现TIME_WAIT 状态;

论坛徽章:
5
未羊
日期:2014-08-07 15:42:10双子座
日期:2014-09-23 15:42:172015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:55:282022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32
8 [报告]
发表于 2015-02-26 08:44 |只看该作者
顶一个

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 10:01:44
9 [报告]
发表于 2015-02-26 09:31 |只看该作者
established 状态都是有效连接吧  你主动关闭 就算客户端没响应 进入TIME_WAIT状态  2MSL时间之后就会关闭啊,最多4分钟
应该是你关闭的时候漏掉了吧 不然不会有大量established

论坛徽章:
5
未羊
日期:2014-08-07 15:42:10双子座
日期:2014-09-23 15:42:172015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:55:282022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32
10 [报告]
发表于 2015-02-26 14:41 |只看该作者
回复 10# sundae333


    不可能啊,我就用closesocket(sockID)这个函数关闭的呀,我还能遗漏什么代码?!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP