2012-06-16 156 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函數()和每次調用