xilebo noone | 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 :
- while (connexion == true) {
- send(socket,trame,trameLen,0);
- t.tv_sec = 1;
- t.tv_usec = 0; // 1000ms de timeout
- fd_set ensemble;
- FD_ZERO(&ensemble);
- FD_SET(m_socket,&ensemble);
- do {
- valret = select(socket+1, &ensemble, 0, 0, &t);
- } while (valret == SOCKET_ERROR && errno== EINTR);
- if (valret == SOCKET_ERROR){
- NetworkError("select" );
- }
- if(FD_ISSET(m_socket,&ensemble)!=0) { // des données sont recues
- valret = recv(socket,data,1024,0);
- if (valret== SOCKET_ERROR) {
- NetworkError("receive" );
- }
- }
- }
|
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
|