Я только что скомпилировал этот код:
http://www.win32developer.com/tutorial/winsock/winsock_tutorial_2.shtm
Я добавил несколько кодов, чтобы он выполнял recv () в бесконечном цикле. Моя проблема, если нет данных для чтения, они все равно не блокируются.
Совершенно ли я ошибаюсь, если считаю, что recv должен блокировать в моем случае?
Код, который я добавил:
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<<"\r\n";
std::cout<<"Client disconnected!\r\n";
// Shutdown our socket
shutdown(Socket,SD_SEND);
// Close our socket entirely
closesocket(Socket);
break;
}
}
Это в конце, после строки std::cout<<"Client connected!\r\n\r\n";
.
Я знаю, что скопировал это из «неблокирующего» примера, но я не думаю, что этот код действительно должен делать что-то неблокирующее, тем не менее, мой цикл for работает как безумный!