修改以前的一个程序,发现在2003server下作为客户端创建socket连接(服务端是多台机器),到达一定数量后,申请内存失败(其他不相干的代码);请教高手2003server下socket连接有限制吗,大概是多少?该进程在socket连接不成功情况下不会出现内存申请失败问题

解决方案 »

  1.   

    ps忘了说明了,运行该进程的机器是非常好的配置,内存达12G,该进程报错时占用内存只有不到300M
      

  2.   


     winsock的select()
    是连接很多台服务器的相同端口;总共大概500线程,3000多个连接,在连接成功后才出现内存申请失败问题
      

  3.   

    1. 修改Port/TCB数量限制到最大值(默认5000) 
    http://www.cnblogs.com/zwq194/archive/2012/12/14/2817673.html
    2. 修改线程默认栈大小到合适(默认1MB)
    3. 用外围工具检测当前程序内存消耗情况, 用工具检测是否有内存泄露
      

  4.   

    句柄,就是你这里的套接字,如果太多达到上限,那么在创建套接字的时候,会失败,且不会影响到内存分配的失败(我理解你内存分配失败是new或者malloc)。可能的原因是,在创建套接字失败的时候,你的逻辑有问题,造成了new一片非常大的内存(比如是个负数),于是造成了new的失败。