各位高手
我在做一网络通讯程序的过程中,由于用户并发量非常大,当服务器同时连接数超过一定数量时(大约在500个左右),客户端不能连接服务器,报错:(
无法打开到主机的连接 在端口 6666 : 连接失败)。此时socket资源可能已被耗尽,有很多的tcp连接状态为TIME_WAIT, 待一段时间过后,socket资源已释放后,连接该服务器,还是报错(无法打开到主机的连接 在端口 6666 : 连接失败), 现在服务器已进入拒绝服务状态!
请问高手,
1、为何socket资源在释放后,还是不能连接?
2、如何解释拒绝服务?
在此多谢了!
我在做一网络通讯程序的过程中,由于用户并发量非常大,当服务器同时连接数超过一定数量时(大约在500个左右),客户端不能连接服务器,报错:(
无法打开到主机的连接 在端口 6666 : 连接失败)。此时socket资源可能已被耗尽,有很多的tcp连接状态为TIME_WAIT, 待一段时间过后,socket资源已释放后,连接该服务器,还是报错(无法打开到主机的连接 在端口 6666 : 连接失败), 现在服务器已进入拒绝服务状态!
请问高手,
1、为何socket资源在释放后,还是不能连接?
2、如何解释拒绝服务?
在此多谢了!
解决方案 »
- ADO远程写SQL2000数据,如何返回保存结果是否可靠,同步慢,异步如何实现?
- 我用ps设计了一个客户端界面,其中包括一节不规则的按钮等,请问1.如何贴图2.因为MFC中的控件多为矩形区域.....
- dll调试中,不同调试方法得到了不同的调试结果,不解
- VisualStudio 2003 怎样使用Wizard增加消息响应函数?
- 有关ListView使用问题,望高手指导 :-),祝大家编程快乐!!
- VC7里怎么找不到MFC ClassWizard?
- 如何删除ini文件中的项?
- 用DrawText()能输出垂直写的文本么?请各位高手指点!
- Timer 问题
- 急,VC里怎样用MICROSOFT MULTIMEDIA CONTROL V6。0???送分
- 谁有POSIFLEX PP6000微打 的命令集? POSIFLEX网站竟然没有!急用!
- ?大家好!MDI 问题怎样打开多个CFormView 有几种方法
在SOCKET上保持尽可能多的ACCEPTEX调用,使每个连接请求都立即被响应.
我以前也碰到过类似问题.
后来的解决方法是每次Accept完后重新调AsyncSelect函数,
还有一种方法是每次Accept的时候设置一定数量的循环,保证缓冲区里没有等待连接的Socket为止.
我仔细检查过,且跟踪过内存,不是由于内存没释放导致的原因。
To silverwgy(yiyi) :
我已经accept了500多个,没有一个漏的,问题是,在处理完这500个后,已关闭socket资源,用netstat命令查看,正在listening, 但是客户端无法连接。
这个问题也不是常出现,但我在很多机器上都遇到偶尔有这个问题。
就是连接数超过一定量后,待这些连接都关了,从原理来讲,socket资源已释放,可以有新的连接了,但这个时候,任何连接都不能连上。
苦恼啊!找资料找遍了,就是没有最终的解决办法!
你用什么软件跟踪内存的。能告诉我吗 ?
谢谢
只有服务器accept了连接,connect才会正确返回
如果长时间没有接收连接,连接队列很快就会堵满,这时客户端就上不来了和time_wait没关系,但服务器最好在客户端关闭连接后再关闭,否则大量的time_wait也不是好事。
我用memproof.to core(酒载青山)
应该不会有长时间没有接收连接的问题。但你说的还是有道理, 怎么把连接队列清空呢?
难道是循环执行accept, 直到把队列清空?在拒绝服务后没有一个激活的连接,这时accept应该正在等待socket连入呀!
对每个连接启动新的服务器进行处理,处理结束后立即关闭这个服务器
在服务端用抓包工具看看客户的SYN包是否能接收到,
服务端返回了什么包。
有什么好的抓包工具、嗅探器吗?
问题确实出在socket连接队列已满, 可能由于并发数多的原因,socket来不及调用accept处理,通过专门的线程来处理accept就解决了该问题了。
再次感谢!