解决time_wait强制关闭socket

所属分类: 实用技巧 / 应用技巧 阅读数: 1278
收藏 0 赞 0 分享
解决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消息批评指正。
更多精彩内容其他人还在看

解决最近Hotmail无法登陆,hotmail不能登陆的最新解决方法总结

解决最近Hotmail无法登陆,hotmail不能登陆的最新解决方法总结
收藏 0 赞 0 分享

用nero刻录可启动功能的光盘而且光盘不是iso格式的

用nero刻录可启动功能的光盘而且光盘不是iso格式的
收藏 0 赞 0 分享

上海居住证办理 续办上海居住证全攻略

上海居住证办理 续办上海居住证全攻略
收藏 0 赞 0 分享

可以用IE轻松远程控制对方电脑的软件 motelyAnywhere 安装使用图文教程

可以用IE轻松远程控制对方电脑的软件 motelyAnywhere 安装使用图文教程
收藏 0 赞 0 分享

完美解决Persits.Jpeg.1 错误 ''800a0001''

完美解决Persits.Jpeg.1 错误 ''800a0001''
收藏 0 赞 0 分享

真正解决win2003的“由于下列错误,Parallel port driver 服务启动失败的解决方法”

真正解决win2003的“由于下列错误,Parallel port driver 服务启动失败的解决方法”
收藏 0 赞 0 分享

ftp上传时数据Socket错误连接超时的解决方法

ftp上传时数据Socket错误连接超时的解决方法
收藏 0 赞 0 分享

解决Default storage engine (InnoDB) is not available导致mysql无法启动的修改办法

解决Default storage engine (InnoDB) is not available导致mysql无法启动的修改办法
收藏 0 赞 0 分享

让星空极速彻底下岗的图文教程

让星空极速彻底下岗的图文教程
收藏 0 赞 0 分享

打开扩展名为ac.$的AutoCAD的临时文件的方法

打开扩展名为ac.$的AutoCAD的临时文件的方法
收藏 0 赞 0 分享
查看更多