Bonjour,
j'écris un client HTTP qui récolte les coordonnées d'un mobile.
Extrait du code qui me pose problème:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
write(sockfd, rq_position, strlen(rq_position));
usleep(250000);
nb_received = 0;
memset(reponse, 0, sizeof(reponse));
do
{
        nb_received = read(sockfd, buffer, sizeof(buffer));
	printf("Received %d bytes\n", nb_received);
	strncat(reponse, buffer, nb_received);
	printf("reponse = %s\n", reponse);
}while(nb_received > 0);
buffer est dimensionné à 512 octets et repose à 1024.
Après envoi de la requête, au premier tour de boucle, read retourne 300 dans nb-received qui est bien le nombre d'octets reçus en réponse (confirmé par wireshark). Mais au second tour de boucle, read reste bloqué 75s (timeout?) avant de sortir et de m'indiquer nb_received = 0.
J'ai inséré un usleep après le write histoire de donner un peu de temps à la pile IP de se remplir. Pas mieux.
J'ai tout ce qu'il faut dans le tableau reponse mais je ne comprend pas le mécanisme:
apparemment, après m'avoir envoyé ses 300 octets, le serveur reste connecté. Si oui, en attente de quoi?
du coup le read détectant que le serveur est toujours là, il peut éventuellement envoyer encore quelque chose?

Je connaît la fonction select mais y a-t-il moyen d'y échapper?

Merci.