本帖最后由 luisszhou 于 2009-08-22 12:08:10 编辑

解决方案 »

  1.   

    收到RST表明服务器中断了连接, 不是你这里中断
      

  2.   

    谢谢楼上指点。顶楼说了,“导致服务器收不到应答,则认为连接异常,估计执行了closesocket, 结果把T1的连接给干掉了(抓包分析发现收到了RST包)”,确实是服务器主动断开连接-->因为它没有收到我发出的应答包-->因为我的程序虽然send()成功,但是没抓到包
      

  3.   

    对了,环境是windows2K3
    创建socket是 socket(AF_INET, SOCK_STREAM, 0)
      

  4.   

    请把全部抓包发上来分析。光一个RST,说明服务器端数据接收异常。调用closesocket正常情况下应该发FIN。
      

  5.   

    如果本机确实没有抓到发出的数据,确实有问题,我估计你需要调整你抓包程序的filter,有没有指定特定地址抓包?我估计没有发到你需要的网络中去,而是发到不知道什么地方的终端去了,从而导致异常
      

  6.   

    我觉得楼主的分析可能是make sense的,个人觉得不应该关注这些异常的RST,而是看看为什么T2没有发出去。因为RST中断的是T1,完全有可能是因为T2没发出引起的。这时候去分析RST,可能陷入歧途,耽误时间
      

  7.   

    问题已经查出,感谢arong1234给我的思路。果然和异常RST没有关系。主要是还是自己程序里一个共享区控制代码有bug,导致触发时内存访问错误,影响到socket通讯。现在修复了这个bug,就可以抓到消失的那个T2的包了看来在碰到MS不可能的情况时,需要考虑下其他方面的因素。结贴,给分