本帖最后由 VisualEleven 于 2012-02-24 13:15:58 编辑

解决方案 »

  1.   

    但是运行到一定时间后,出现问题,能够正常收到客户端发送的报文,但是却发送不到服务器B。
    -----------------------
    send失败?WSAGetLastError失败的原因是什么?服务器A不能通过TCP连接到任何服务器上
    -----------------------------
    不能connect连接,失败的原因又是什么?资源有泄露?socket或者其它句柄没有释放?端口被占用?or 其它?
      

  2.   

    这属于程序bug了
    长时间运行出现问题,可能是某些变量溢出,或者说是内存分配导致bug(通常是由于new太多,内存碎片就很多,导致内存耗尽)
      

  3.   

    症状就是服务运行的机器telnet serverip 端口号 连不上
    其他机器可以连接
    连数据库都连不上了
    sqlserver 1433端口连不上
    程序不报错
    分析是tcp连接的问题
      

  4.   

    A -> B 是固定的一个连接还是每次转发时都创建新连接?
    客户端 -> A 是固定的连接还是每次都会创建新连接?
    查一下网络状况中的 CLOSE_WAIT 或者 FIN_WAIT_1、FIN_WAIT_2 之类的有多少
    看样子感觉是系统可用socket资源的问题,极像是没有随机socket用于作为客户端连接其他服务器了(telnet不了1433也许就是因为如此)
      

  5.   

    netstat -ano | find "CLOSE_WAIT"
    netstat -ano | find "FIN_WAIT"看看有多少实在不行,写个小程序,里面仅调用 socket 函数创建一个socket fd,然后close掉,在出现了无法连接的情况下,跑一下这个小程序,看看创建socket能不能正确完成,如果创建socket失败,就是socket资源已经耗尽了,更别谈什么连接的问题了