windows网络参数的设置都在注册表: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 下
要调整网络参数,修改该位置下已有键值或新增键值。
1. MaxUserPort
键值范围:5000 - 65534 (xp, 2003下默认5000,很难想象在2003服务器系统下也是5000,)
键值作用:设定端口号范围
当端口号不足时,发起socket connect连接时会报错:
中文:"通常每个套接字地址(协议/网络地址/端口)只允许使用一次"
英文:Only one usage of each socket address (protocol/network address/port) is normally permitted.
2. TcpTimedWaitDelay
键值范围:30 - 240 (单位:秒,默认值:240)
键值作用:相信很多人都遇到过犯人的"TIME_WAIT"状态,在多并发程序下容易出现将端口号耗完的情况。
"TIME_WAIT"状态是TCP/IP协议规定的一种套接字状态
一个socket连接的是两个对象:client <-----> server
不管是client还是server,谁先关闭套接字(调用close()),谁就会进入TIME_WAIT状态
这是协议规定的,不可避免的,能改变的是等待时间
windows下默认为3分钟,linux下默认为1分钟
因而在windowds下特别容易出现"TIME_WAIT"占满的情况
更有甚者,在win2008环境下,有个严重的bug,如果开机时间长达497天后,TIME_WAIT就永远不释放啦
哈哈,再次鄙视微软,这还是服务器系统么,服务器可是常年不关机的啊,
参考微软官网:https://support.microsoft.com/zh-cn/kb/2553549?spid=11737&sid=156
在服务器上,建议将该值改为60(一分钟)
参考文章:
避免TCP/IP端口耗尽: https://msdn.microsoft.com/zh-cn/library/aa560610(v=bts.10).aspx