重启程序没有效果,只有重启机器才行。

解决方案 »

  1.   

    可能是程序有bug,占用了太多的操作系统的端口和资源。我也遇到过,但是程序退出后等一会再连就好了!
      

  2.   

    to cchvsgame:
    你是说等过了TcpTimedWaitDelay时间再连接就可以?
      

  3.   


    如果没有调用closesocket,那么重启程序就可以了,程序退出后,系统会自动释放的。
      

  4.   


    估摸着太多资源被占用.你可以在程序无法向外连接时打开IE访问网站,如果一样无法访问的话,那肯定是太多资源被占用,系统无法腾出资源去建立socket句柄.
      

  5.   

    你审请的内存没有删除,比如你要发收数据时审请的内存,查查当出错时有没有删除丢
    如下
    char *chBUF = new char[20];int ret = recv(sock,chbuf,20,0); ->这边堵塞了,你关了你的程序没删除内存if(ret == SOCKET_ERROR)
    {
    return ->这边返回了,没删除
    }opt;..
    delete chbuf
      

  6.   

    最好的方法,发布新的build,加log如果client采用指定端口通信,而没有设置端口重用
    主动关闭后,由于timewait,会在1--4分钟内,连接不上客户说连接不上,是一直连接不上?还是连不上就重起了?
      

  7.   

    应该是socket资源没有释放。
    进程结束后,系统资源是不会自动释放的
      

  8.   

    用netstat -na -o查看一下端口使用状况.
      

  9.   


    client采用的是系统分配的端口,应该不需要端口重用。这个client本身是一个服务程序,所以客户不会一直等下去,他们尝试连不上就重启了。
    这个现象不是经常出现,只是有时出现。
    一般情况下,关闭程序再启动都很正常。
      

  10.   

    应该是socket资源没有释放。 
    进程结束后,系统资源是不会自动释放的
      

  11.   

    更正一下,应该不能说是socket描述符资源,而是端口资源.
      

  12.   


    说得有道理。
    其实我也怀疑是TIME_WAIT的缘故。但这是不是需要短时间大量的主动关闭动作才会引发所有的socket都处于TIME_WAIT状态啊?
      

  13.   

    这个问题是比较麻烦的.如果系统的要求并不是太过苛刻,可以考虑将注册表当中Timedwaitedelay的时间设置缩短.然后增加可用连接数.
    [code=INIFile][HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
    "MaxUserPort"=dword:0000fffe
    "TcpTimedWaitDelay"=dword:00000005[/code]
      

  14.   

    "MaxUserPort"=dword:0000fffe
    是修改系统动态分配最大端口号吗?
    "TcpTimedWaitDelay"=dword:00000005
    等待时间是5秒还是5毫秒?