Winsock 2, HTTP (C/C++) : lenteur anormale avec recv dans une boucle
Bonjour,
Je développe un petit programme qui a pour but de résoudre une épreuve informatique (partez pas je vous demande pas de la résoudre :mrgreen:), tout est bon sauf qu'une lenteur avec recv() me gêne, étant donné que le programme doit être rapide (- d'une seconde).
J'utilise winsock pour executer ma requête HTTP, tout marche bien, sauf quand il s'agit de recevoir la réponse du serveur (il envoie une page).
Si j'appelle recv en lui donnant un gros buffer, tout va très bien. Sauf que je cherche à faire ça plus proprement (je pense pas qu'un navigateur s'amuse à recevoir les pages dans un buffer de taille prédéfinie), et donc je place mon recv dans une boucle, pour recevoir partie par partie. Tout marche comme il faut, mais mon programme ne fait rien pendant au moins 10 secondes, alors que les données ont déjà été reçues.
Le code responsable :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
char * buffer = new char[BUFLEN];
do
{
iResult = recv( csocket, buffer, BUFLEN, 0 );
if( iResult > 0 )
{
//recvbuffer est de type std::string
recvbuffer.append( buffer, iResult );
ZeroMemory(buffer, BUFLEN);
}
else if( iResult == 0 )
{
std::cout << "Connection closed" << std::endl;
}
else
{
std::cout << "Error : recv(), code : " << WSAGetLastError() << std::endl;
shutdown( csocket, SD_BOTH );
closesocket( csocket );
WSACleanup();
}
}
while( iResult > 0 );
delete buffer;
std::cout << recvbuffer.c_str() << std::endl; |
Si quelqu'un voit le problème :zoubi:
Merci.
PS : j'ai cherché mais n'ai pas trouvé de topic similaire, par contre, savez-vous si le '\n' est envoyé à la toute fin de la réponse ? Je me demande si ça vient d'ici, en tout cas l'affichage se fait correctement.