TCP连接如何快速切断?(50分)

  • 主题发起人 主题发起人 轻松人生
  • 开始时间 开始时间

轻松人生

Unregistered / Unconfirmed
GUEST, unregistred user!
建立TCP连接,之后断开连接,为什么不能及时释放端口,用netstat -a看,
以前用过的端口仍然在等待,需要比较长的时间才能释放,
要快速释放这些端口我该怎么办?我的系统是windows 2000 server。
 
断开连接用closesocket都会需要比较长的时间才能释放吗?
 
需要比较长的时间,但可以适当的缩短时间,delphi对windows低层封装比较厉害,
针对低层的开发delphi不怎么好,就是快,稳定性不如VC
 
closesocket是WIN API,谁调用都一样,和Delphi有什么关系啊,这个问题我也塞车中....
关注
 
你是用什么组件,可能是组件Free时,正在WaitFor,所以窗体关闭了,但是进程还没有,
你用任务管理器看看,关闭窗体时是否进程也关了,如果关了,那么那个端口也随之关了。
好像用了Socket的组件,如果是用了Thread,那在结束线程时,它都会WaitFor,那就需要
一定的时间。
 
如果用api,我感觉很快啊,马上就关了
closesocket
或者是shutdown
 
这个好像DELPHI也可以解决每个SOCKET控件里都有SOCKET的句柄,直接用API调用这个句柄把他关了不就完了吗?
 
我就是直接用的API的closesocket,关虽然是马上关了,但是没有马上释放资源,若马上
再用原参数进行连接,则会出现connect fail,不知何故?
 
此一函式是用来关闭某一 Socket。 若是使用者原先对要关闭之 Socket 设定 SO_DONTLINGER,则在呼叫此一函式 後,会马上回覆,但是此一 Sokcet 尚未传送完毕的资料会继续送完後才关闭。 若是使用者原先设定此 Socket 为 SO_LINGER,则有两种情况:
  (a) Timeout 设为 0 的话,此一 Socket 马上重新设定 (reset),未传完或未收 到的 资料全部遗失。
  (b) Timeout 不为 0 的话,则会将资料送完,或是等到 Timeout 发生後才真正 关 闭。 程式结束前,读者们可千万别忘了要呼叫 WSACleanup() 来通知 Winsock Stack;如果您不呼叫此一函式,Winsock Stack 中有些资源可能仍会被您占用而 无 法清除释放
 
后退
顶部