Je viens compilé ce code: http://www.win32developer.com/tutorial/winsock/winsock_tutorial_2.shtmWinsock recv() ne bloque pas
J'ai ajouté quelques codes il ne recv(), dans une boucle infinie. Mon problème, s'il n'y a pas de données à lire, ça ne bloque toujours pas.
Est-ce que je me trompe totalement si je pense que recv devrait bloquer dans mon cas?
Le code que j'ai ajouté est:
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;
}
}
Il est à la fin, après la ligne std::cout<<"Client connected!\r\n\r\n";
. Je sais que j'ai copié ceci à partir d'un exemple "non bloquant", mais je ne pense pas que ce code devrait faire quelque chose de non bloquant vraiment, encore, ma boucle for fonctionne comme une folle!
Pourriez-vous coller le code supplémentaire que vous avez écrit? – chrisaycock
Utilisez-vous des appels WSAsync ...? – Rob
Quel type de client avez-vous connecté à votre serveur? – chrisaycock