2012-06-16 115 views
0

我在C++中开发一个服务器,当im在while循环中使用recv()时,它将返回-1的所有时间长度,并且继续循环而不会阻塞。C++ Winsock recv不会阻塞

while(true) 
{ 
    char buffer[1024]; 
    int dataLength = recv(socket, buffer, 1024, 0) 
    cout << dataLength; 
} 

输出:-1-1-1-1-1-1-1-1-1 .............

任何人知道如何使这个套接字阻塞,直到它recv数据?

在此先感谢!

+1

什么WSAGetLastError返回后打印结果? –

+0

在下面答案给出的线程的帮助下,我设法打印出什么WSAGetLastError,它返回10057 – UnTraDe

+0

'WSAENOTCONN 10057(0x2749) 由于套接字未连接,发送或接收数据请求被禁止一个使用sendto调用的数据报套接字)没有提供地址。“ - [系统错误代码](http://msdn.microsoft.com/en-us/library/windows/desktop/ms681391(v = vs.85)。 aspx) - 学会爱他们。 – chris

回答

0

正如詹姆斯所说,检查是否发生套接字错误。 recv()的默认行为是阻止。另请参阅this thread

2

也许还有在动初始化 错误尝试调用GetLastError函数()和每次调用