解决time_wait强制关闭socket
更新时间:2007年12月11日 21:24:53 作者:
解决time_wait
今天我在测试代码的时候,边开边看电影,服务端的CPU消耗和内存使用让我挺满意的
可是过了一会,在统计达到了一定连接后,后来连接很多无法登陆。象上公交车,拥
挤不堪无法上车,用netstat -an查看了下连接状态,time_wait状态的端口非常多
原因就在此了,消耗完系统的端口数,服务端将就无法接收新连接,找到问题就来说明
time_wait,这个东西默认存活时间为2分钟,够长的,这点很要命,更多的大家百度下
对付这个问题,我写了一个函数,强制关闭socket,代码环境{delphi7+windows xp}
PS:只会点pascal,其他不熟。
function ForceCloseSocket(DestSock:TSocket):Boolean;
var
NoWait:Boolean;
NLinger:Tlinger;
begin
Result:=False;
NoWait:=False;
if SetSockOpt(DestSock,SOL_SOCKET,SO_DONTLINGER,@NoWait,sizeOf(Boolean))=SOCKET_ERROR then
Result:=False;
NLinger.l_onoff:=1;
NLinger.l_linger:=0;
if SetSockOpt(DestSock,SOL_SOCKET,SO_LINGER,@NLinger,sizeOf(NLinger))=SOCKET_ERROR then
Result:=False else Result:=True;
if CloseSocket(DestSock)=SOCKET_ERROR then Result:=Flase else Result:=True;
end;
Dz编辑器真是头大,麻烦,这个是强制关闭函数,一点心得,与大家分享下,欢迎PM消息批评指正。
今天我在测试代码的时候,边开边看电影,服务端的CPU消耗和内存使用让我挺满意的
可是过了一会,在统计达到了一定连接后,后来连接很多无法登陆。象上公交车,拥
挤不堪无法上车,用netstat -an查看了下连接状态,time_wait状态的端口非常多
原因就在此了,消耗完系统的端口数,服务端将就无法接收新连接,找到问题就来说明
time_wait,这个东西默认存活时间为2分钟,够长的,这点很要命,更多的大家百度下
对付这个问题,我写了一个函数,强制关闭socket,代码环境{delphi7+windows xp}
PS:只会点pascal,其他不熟。
function ForceCloseSocket(DestSock:TSocket):Boolean;
var
NoWait:Boolean;
NLinger:Tlinger;
begin
Result:=False;
NoWait:=False;
if SetSockOpt(DestSock,SOL_SOCKET,SO_DONTLINGER,@NoWait,sizeOf(Boolean))=SOCKET_ERROR then
Result:=False;
NLinger.l_onoff:=1;
NLinger.l_linger:=0;
if SetSockOpt(DestSock,SOL_SOCKET,SO_LINGER,@NLinger,sizeOf(NLinger))=SOCKET_ERROR then
Result:=False else Result:=True;
if CloseSocket(DestSock)=SOCKET_ERROR then Result:=Flase else Result:=True;
end;
Dz编辑器真是头大,麻烦,这个是强制关闭函数,一点心得,与大家分享下,欢迎PM消息批评指正。
相关文章
XP/win2003下发现1G的内存比512M还慢的解决方法
XP/win2003下发现1G的内存比512M还慢的解决方法...2007-11-11
註冊必須填性別&生日 For Discuz 6.0 更改方法
註冊必須填性別&生日 For Discuz 6.0 因為本人想要這類插件,但每個這類插件都有少許問題,所以本人就由多篇文章中,整合了這篇章出來,所以原作者是誰人也不清楚‧2008-05-05
IIS运行错误 Server Application Error 错误代码 Error: 8004的解决方法
IIS故障新解...其实也不是什么新解,呵呵不过网络上的大虾们给的方法结合了下就搞定了问题2007-09-09


最新评论