我写了一个代理服务器程序,工作过程是IE发请求给代理,代理再连结到IIS,并把请求发给IIS,可是出现这样的问题,当IE关闭的时候,代理就关闭和IE通信的socket,并且我也调用closesocket(..)关闭了和IIS通信的socket了,可用netstat -a一看,IIS和代理通信的socket却没有消失,status项为wait_time,直到关掉代理程序,或过段时间自动消失,输出如下:
TCP Desktop:1255 Desktop:http TIME_WAIT
TCP Desktop:1257 Desktop:http TIME_WAIT
TCP Desktop:1263 Desktop:http TIME_WAIT
TCP Desktop:1265 Desktop:http TIME_WAIT
TCP Desktop:1267 Desktop:http TIME_WAIT
TCP Desktop:1269 Desktop:http TIME_WAIT
TCP Desktop:1275 Desktop:http TIME_WAIT
TCP Desktop:1277 Desktop:http TIME_WAIT
TCP Desktop:1279 Desktop:http TIME_WAIT
TCP Desktop:1281 Desktop:http TIME_WAIT
TCP Desktop:1287 Desktop:http TIME_WAIT
TCP Desktop:1289 Desktop:http TIME_WAIT
......但是直接用IE请求IIS时,关掉IE却没有这种现象,为什么会出现这种情况?wait_time,是什么意思?表明什么?是程序的什么地方出了问题呢?
TCP Desktop:1255 Desktop:http TIME_WAIT
TCP Desktop:1257 Desktop:http TIME_WAIT
TCP Desktop:1263 Desktop:http TIME_WAIT
TCP Desktop:1265 Desktop:http TIME_WAIT
TCP Desktop:1267 Desktop:http TIME_WAIT
TCP Desktop:1269 Desktop:http TIME_WAIT
TCP Desktop:1275 Desktop:http TIME_WAIT
TCP Desktop:1277 Desktop:http TIME_WAIT
TCP Desktop:1279 Desktop:http TIME_WAIT
TCP Desktop:1281 Desktop:http TIME_WAIT
TCP Desktop:1287 Desktop:http TIME_WAIT
TCP Desktop:1289 Desktop:http TIME_WAIT
......但是直接用IE请求IIS时,关掉IE却没有这种现象,为什么会出现这种情况?wait_time,是什么意思?表明什么?是程序的什么地方出了问题呢?
这样的目的是为了,如果b没有收到a最后的ack,可以进行超时重传fin。所以说,主动发起关闭连接的一方(也就是客户端和服务器在时间上谁先调用closesocket)会进入time_wait状态,这个时候,进程所占用的端口号不能被释放。除非在你的程序中用setsockopt设置端口可重用的选项,但这不是所有操作系统都支持的。
可以有几种办法:1、
LINGER lingerStruct;
lingerStruct.l_onoff = 1;
lingerStruct.l_linger = 0;if (SOCKET_ERROR == ::setsockopt(m_socket, SOL_SOCKET, SO_LINGER, (char *)&lingerStruct, sizeof(lingerStruct)))
{
glog.log(__FUNCTION__,"set linger error %d",::WSAGetLastError());
}
不过这种办法不是很安全的,不过现在网络都很好啦,不会有问题的。2、修改注册表
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters]
"TcpTimedWaitDelay"=dword:00000005
这个值好像是300秒到30秒之间,改成30秒后你会发现TIME_WAIT很快就会消失了。
这个在2000下面是肯定支持的,98下面我没试过,不过服务器你还会用98吗?上面提到REUSEADDR,REUSEPORT,可能对这个用处不是很大的。
connection: close 的头给IIS,那IIS这会主动关闭和IE的连接,应该就不会出现这种情况了!
FastBT下载 1.0.3.66版 2003.12.25 1.修改上传算法. 2.修改一些BUG.
http://www.eyeteck.com/caimouse/web/BT.htm