收到数据的客户端socket句柄,是不是"有信号"的内核对象,能让WaitForXXX函数返回?解决方案

收到数据的客户端socket句柄,是不是"有信号"的内核对象,能让WaitForXXX函数返回?
我写了一对简单的socket服务器/客户端程序,可以很好的工作。
然后我对客户端做了一点小的修改,原来的代码是

C/C++ code

    while(1){
        char buf[10]={0};
        if(0>=recv(hClient,buf,10,0)){
            printf("recv error\n");
            break;
        }
        printf("received %s\n",buf);
    }

没有问题,然后我改成了:
C/C++ code

    while(1){
        char buf[10]={0};
        DWORD ret=WaitForMultipleObjects(1,(LPHANDLE)&hClient,FALSE,INFINITE);
        if(ret==WAIT_OBJECT_0){
            if(0>=recv(hClient,buf,10,0)){
                printf("recv error\n");
                break;
            }
            printf("received %s\n",buf);
        }
    }


发现现在不行了,WaitForMultipleObjects()函数调用,并没有返回,死在那里
-------------------------------------------------
我的疑问在于:
  既然一个Socket句柄已经得到了数据,那么这个内核对象就处于"有信号"的状态吧,应该就能使得WaitXXX函数返回啊。
我是不是理解错了概念,还是函数参数填的有问题?

各位windows编程高手帮我看看!

------解决方案--------------------
SOCKET不算是内核对象
------解决方案--------------------
可以用事件选择网络模型