一个Win32 Console Application
程序流程是这样的:
queue<HANDLE> TQueue;//全局队列SOCKET sSocket;//全局变量当sSocket bind端口后,运行一个函数:PkgRecv()
PkgRecv()是这样:
void PkgRecv(){
    DWORD TID;
    HANDLE T;
    struct sockaddr_in c;
    int pl, l = sizeof(c);
    SOCKET cSocket;
    char buf[1024];
    if (sSocket!=INVALID_SOCKET){
        T = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)PkgRecv, NULL, 0, &TID);
        if (T!=0) TQueue.push(T);
        cSocket = accept(sSocket, (struct sockaddr *)&c, &l);
        if (cSocket!=INVALID_SOCKET){
              while(1){
                  pl = recv(cSocket, buf, sizeof(buf), 1);
                  if (pl==SOCKET_ERROR||pl==0) break;
                  printf("Recv->%s\n", buf);
              }
        }
    }
}问题是这样的:
我自己的机器配置:
PIII 1.7G CPU /384MB 内存
当我同时开启100个线程对主程序发出连接请求,并且发送包,测试100万个包,非常正常,没有崩溃现象我的服务器配置:
2个Xeon 2.4G CPU / 1024MB 内存
当我同时开启10个线程对主程序发出连接请求,并且发送包,主程序就崩溃了,有的时候连100个包都没接受到就崩溃了,崩溃前没有任何提示我把accpet的socket连接设置为非阻塞模式也是这样的请问这是怎么回事?配置越高反而处理不了大量数据