[C TCP/IP] Gestion d'erreur sur un send

Gestion d'erreur sur un send [C TCP/IP] - C - Programmation

Marsh Posté le 14-04-2006 à 15:30:28    

Bonjour,
 
je suis confronté à un problème que je n'arrive pas à résoudre.
 
J'ai un appareil connecté à un autre en TCP-IP qui dialogue  sous forme de question réponse. Je fais un polling toutes les 2 secondes en envoyant un send, puis je fais un receive derriere. L'algo (simplifié) donne ca :
 
 

Code :
  1. while (connexion == true) {
  2.  send(socket,trame,trameLen,0);
  3.  t.tv_sec = 1;
  4.  t.tv_usec = 0; // 1000ms de timeout
  5.  fd_set ensemble;
  6.  FD_ZERO(&ensemble);
  7.  FD_SET(m_socket,&ensemble);
  8.  do {
  9.   valret = select(socket+1, &ensemble, 0, 0, &t);
  10.  } while (valret == SOCKET_ERROR && errno== EINTR);
  11.  if (valret == SOCKET_ERROR){
  12.   NetworkError("select" );
  13.  }
  14.  if(FD_ISSET(m_socket,&ensemble)!=0) { // des données sont recues
  15.   valret = recv(socket,data,1024,0);
  16.   if (valret== SOCKET_ERROR)  {
  17.    NetworkError("receive" );
  18.   }
  19.  }
  20. }


 
 
Le process fonctionne très bien. Seulement le second appareil peut etre coupé à tout moment et donc la connexion est rompue.
 
Sauf que ni send, ni select me renvoie un code d'erreur pour me dire que la connexion est rompue. Je sais que je recevrai mon code d'erreur comme quoi la connexion est rompue sur un appel à la fonction recv. Seulement, la fonction recv (d'après le code) ne sera appelée que si des données ont été recues (a cause de l'appel select).
 
Y a-t-il un moyen de tester si la connexion existe toujours autrement qu'avec un appel à la fonction recv ?
 
merci d'avance :)
 
 
 
 
 

Reply

Marsh Posté le 14-04-2006 à 15:30:28   

Reply

Marsh Posté le 14-04-2006 à 19:46:25    

utilise la fonction recvmsg()

Reply

Marsh Posté le 14-04-2006 à 19:47:55    

utilise et vérifie le flag MSG_ERRQUEUE

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed