大家好,我的写Server程序出现很多CLOST_WAIT,而程序死在那里不动,这该怎么办,很急啊,谢谢。

解决方案 »

  1.   

    CLOSE_WAIT好像跟一个socket选项有关,程序死应该不是直接跟这个有关系的
      

  2.   

    setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *)&one, sizeof(one));
    应该是SO_REUSEADDR
      

  3.   

    那怎么什么有关系呢?我用的是CAsyncSocket,谢了。
      

  4.   

    谢谢microyzy,能不能再说多点线索,再次感谢。
      

  5.   

    CAsyncSocket应该也是一样吧,只不过封装了而异
    不设置SO_REUSEADDR应该是过了一段时间以后才能重新使用该端口,你再过一段时间查看,可能CLOSE_WAIT就不存在了
      

  6.   

    TCP/IP详解里面详细说有的,但是我既不清楚了,不好意思啦
    我刚才看了一下,这个选项处理的是TIME_WAIT
    出现CLOSE_WAIT可能是你的连接双方没有正常关闭连接,导致一放等待另一方
    “这是一个tcp/ip实现上的问题,除非你修改你的协议,wait状态的存在是有他的道理的;而且那不会影响到新的连接;
    拒绝服务可能是因为并发连接数超过了listen中backlog造成的;当内核接受到的连接请求充满内核的请求队列的时候,新的连接请求就会被拒绝; 
    写程序,经常也碰见这种情况,主要是有一方关闭SOCKET,但是另外一方没有检测到,导致没有检测到的一方出现CLOSE_WAIT的情况”
      

  7.   

    我检测到我把Accept(pSocket)里的pSocket写成了成员指针,当多次被动关闭时,我的应用的指针泄漏会不会造成程序呆滞呢?还有,backlog问题怎么解决才好呢?我都是按默认来做的!谢了。
      

  8.   

    setlinger可能也有用。
    REUSEADDR能让你的LISTEN不管这个状态。