收到数据的客户端socket句柄,是不是"有信号"的内核对象,能让WaitForXXX函数返回?解决方案
收到数据的客户端socket句柄,是不是"有信号"的内核对象,能让WaitForXXX函数返回?
我写了一对简单的socket服务器/客户端程序,可以很好的工作。
然后我对客户端做了一点小的修改,原来的代码是
没有问题,然后我改成了:
发现现在不行了,WaitForMultipleObjects()函数调用,并没有返回,死在那里
-------------------------------------------------
我的疑问在于:
既然一个Socket句柄已经得到了数据,那么这个内核对象就处于"有信号"的状态吧,应该就能使得WaitXXX函数返回啊。
我是不是理解错了概念,还是函数参数填的有问题?
各位windows编程高手帮我看看!
------解决方案--------------------
SOCKET不算是内核对象
------解决方案--------------------
可以用事件选择网络模型
我写了一对简单的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不算是内核对象
------解决方案--------------------
可以用事件选择网络模型