用idhttp,idftp都是这样的.
程序掉用disconnect后,再在dos下netstat -an
发现还有连接 状态是 Timer_wait,要过一会儿才会消失.
不知道这是不是indy的"温和关闭"有关系?
用nmhttp没有问题.基本上不写disconnect,只要free一下,netstat -an都不会看到连接了.

解决方案 »

  1.   

    同样是下载文件,我用抓包软件跟踪了下,当NMHTTP 被Free的时候,先发送一条FIN,接着发送了一个标志位为RST的包到服务器.
    而IDHTTP先发送了一个FIN标志位的包,然后发送了一个ACK标志位的包.尝试把IDhttp.response.keepalive设置为false,也无效.
    虽说只是一个延迟而已.应该算是正确的,但现在我的程序出了问题.我用idhttp做了一个远程登陆系统,我测试了一下,反反复复登陆,退出,7~8次后,就再也不能登陆了,查看以下tcp连接,发现有7~8个Time_wait的连接.不知道服务器上是否也有这些等待关闭中的连接,如果也有,那就不大妙了.
      

  2.   

    一般约一分钟左右这个SOCKET句柄状态会由TIME_WAIT变为CLOSE在TCP协议里面,有所谓的半关闭.就是要关闭连接时候,SOCKET两端底层是互发
    FIN---ACK包(IP包) 一问一答.
    为了确保最后的传输用户数据不会被丢掉..SOCKET在发出FIN之后,停止自己这端发出数据,继续收数据,
    在接收对端最终ACK应答后才会最终进入CLOSE状态.在WINDOWS下面..调用SOCKET API的时候,这些有可能实现得不够完美..但一般不容易出大问题.
      

  3.   

    简单说来,TCP两端,谁先主动CLOSE,谁就进入TIME_WAIT状态.
    觉得楼主的问题同TIME_WAIT无关.