I have just compiled this code:
http://www.win32developer.com/tutorial/winsock/winsock_tutorial_2.shtm
I have added some codes so it does recv(), in an infinite loop. My problem, if there is no data to read, it still does not block.
Am I totally mistaken if I think recv should block in my case?
The code I have added is:
for(;;)
{
char buffer[1000];
memset(buffer,0,999);
int inDataLength = recv(Socket,buffer,1000,0);
int nError=WSAGetLastError();
if(nError!=WSAEWOULDBLOCK&&nError!=0)
{
std::cout<<"Winsock error code: "<<nError<<"
";
std::cout<<"Client disconnected!
";
// Shutdown our socket
shutdown(Socket,SD_SEND);
// Close our socket entirely
closesocket(Socket);
break;
}
}
It is at the end, after the std::cout<<"Client connected!
";
line.
I know I copied this from a "non blocking" example, but I dont think this code should do anything nonblocking really, still, my for loop is running like mad!
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…