长久以来一直在郁闷一个问题,我有个服务端程序,之前因为Socket句柄泄露,没有释放导致系统无法浏览网页,但远程、ping外网什么的都通,后台修正程序后不再出现类似问题了。
今天闲的蛋疼,就想找找Windows Socket到底限制到多少。下面是示例程序(连接的IP要有程序在监听80端口,否则不起作用),将程序中的$nSocket内容改大一点在电脑上运行后,会出现无法打开网页的情况。
#include <File.au3>
Local $g_IP = "192.168.3.5"
TCPStartup()
$nSocket = 3100
For $i = 1 To $nSocket
Local $socket = TCPConnect($g_IP, 80)
Next
RunWait(@ComSpec & ' /c "' & @ScriptDir & '\Handle.exe" -a >c:\1.txt')
$hOpen = FileOpen('C:\1.txt')
$str = FileRead($hOpen)
$strR = StringRegExp($str, '\\Device\\Afd|\\Device\\Tcp', 3)
FileClose($hOpen)
ShellExecute('C:\Program Files\Internet Explorer\IEXPLORE.EXE')
MsgBox(0, 'Tcp | Afd 总数=' & UBound($strR) - 1, '创建 ' & $nSocket & ' 个连接完成!')
Handle.exe在这里下载,放到程序目录下,运行上面代码就可以了。
当程序一次性创建N个连接后,就会出现无法打开网页的情况,但具体系统限制多少个Socket连接就不是很清楚了,有人熟悉这方面问题吗? |