免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: shiva
打印 上一主题 下一主题

连接断开,socket connect反复下去,socket描述符消耗全部消耗掉了。 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-06-06 11:45 |只看该作者
原帖由 baohuaihuai 于 2007-6-6 11:40 发表
netstat一下,看你的连接是处于什么状态的


毫无疑问,就是TIME_WAIT

论坛徽章:
0
12 [报告]
发表于 2007-06-06 11:47 |只看该作者
原帖由 baohuaihuai 于 2007-6-6 11:43 发表
而且你是connect的?一个程序里主动发起连接那么多次?


对,一次连接不成功,我要再次尝试。
而且当我一次要开50个连接的时候,很快,所有的file descriptor都被消耗空。所有的socket都是TIME_WAIT。

论坛徽章:
0
13 [报告]
发表于 2007-06-06 11:55 |只看该作者
既然是TIME_WAIT,那已经是处理完了而不是连接不成功啊,你就等着它超时就好了.如果connect不成功连接就关闭了啊.
或者你在服务器端先主动关闭描述符,这样客户端就不会TIME_WAIT了.服务器REUSEADDR就好了.

论坛徽章:
0
14 [报告]
发表于 2007-06-06 12:00 |只看该作者
原帖由 baohuaihuai 于 2007-6-6 11:55 发表
既然是TIME_WAIT,那已经是处理完了而不是连接不成功啊,你就等着它超时就好了.如果connect不成功连接就关闭了啊.
或者你在服务器端先主动关闭描述符,这样客户端就不会TIME_WAIT了.服务器REUSEADDR就好了.


服务器。。。是别人的。。。。我动不了。。。

而且socket都被系统抓的死死的。TIME_WAIT。。。。。除非我推出程序,在启动客户端。。。

论坛徽章:
0
15 [报告]
发表于 2007-06-06 12:49 |只看该作者
关于TIME_WAIT,可以把SO_LINGER 设为0 不要用shutdown 直接用closesocket试试看还有没有TIME_WAIT

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
16 [报告]
发表于 2007-06-06 13:26 |只看该作者
ulimit -n 16384
对付一般高点击应用足够了

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
17 [报告]
发表于 2007-06-06 13:28 |只看该作者
不要设置SO_LINGER超时为0
对服务器非常不友好

论坛徽章:
0
18 [报告]
发表于 2007-06-06 14:03 |只看该作者
问题没有完全解决。

不过现在进展是:
如果connect 成功,通信结束后我不仅仅要shutdown(s, RDWR), 还进行close(s) (或者直接进行close(s))。而且在调用新的socket()之前进行memset(&s, 0, sizeof(s))。该socket描述符会重用。

问题是,如果connect失败,这个socket的TIME_WAIT还要持续一段时间。

论坛徽章:
0
19 [报告]
发表于 2007-06-06 14:49 |只看该作者
再没人知道了么?
即使不再TIME_WAIT了。新的socket调用仍然不会用以前的socket描述符。

论坛徽章:
0
20 [报告]
发表于 2007-06-06 14:56 |只看该作者
贴代码吧,如果方便的话
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP