Bonjour à tous,

J'ai un bête problème : j'envoie une commande à un serveur et il me répond. Le problème provient du fait qu'il m'envoie sûrement plusieurs packet. Dans mon code je ne fait que un read, donc je n'ai pas la totalité du message.

Comment puis-je modifier mon code pour avoir la totalité de la réponse ?

Voici mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
bool client :: recive (char* host, char* service, char* packet, int packetSize)
{
  char buff[BUFFER_SIZE];
  for(int i=0; i<BUFFER_SIZE; i++) 
  	buff[i] = '\0';
  buff[1] = '\0';
  int sock;
  int length;
  sock = connectTCP (host, service);  // or connectUDP
  if(sock < 0)
	  return false;
  write (sock, packet, packetSize);
  length = read (sock, buff, sizeof(buff));
  close (sock);
  if (length < 0)
  {
	  //cerr << _NET_ERR_ << "read failed: ";// << strerror(errno) << "\n";
	  cout << "*** client::recive > Read failed." << endl;
	  return false;
  }
  buff[length] = '\0';
  if (recived != NULL)
    delete recived;
  recived = NULL;
  recived = new char [length+1];
  assert (recived != NULL);
  memcpy(recived, buff, length+1);
  return true;
}
J'imagine faire un while avec un select, mais je ne sais pas trop comment faire sans que mon processus se mette en sleep dès qu'il n'y a plus rien à lire...