Aller au contenu

socket TCP - timeout sur le read


Messages recommandés

Posté(e) (modifié)

Hello tout le monde !

 

Nouvelle question sur les socket TCP :

 

on connait la fonction readUntil().

Je l'utilise dans toutes mes communications TCP, avec en général le marqueur de fin "\r".

 

Maintenant je souhaite également ajouté un timeout dans la réception de la réponse. Le principe : 

 

  • j'envoie une trame avec send()
  • je déclenche la lecture avec le readUntil()
  • Mais si pas de réponse au bout de x temps, je souhaite renvoyer la trame initiale !

 

Et c'est là que ça bloque, je ne vois pas du tout comment le faire vu qu'il n'y a pas de notions de timeout dans le readUntil() ...

Le readUntil est bloquant, je ne peux rien faire "pendant" ce temps là (genre faire tourner un timer)

 

quelqu'un a une idée ?

 

sans oublié que le tout est asynchrone...

Modifié par jjacques68
Posté(e)

Dans ce cas je pense qu'il faut utiliser le read() simple.

Et le timeout tu le configures lors de l'initialisation de la socket, avec :

self.sock = net.TCPSocket({timeout = 10000})

Lors de l'appel du read(), selon la fonction appelée en retour asynchrone (success ou error), tu sauras si des données ont été lues, ou non avant que le timeout n'arrive.

 

Du coup, ça sera à toi de gérer la logique de mémorisation/concaténation/séparation des paquets avec ton délimiteur retour chariot \r

 

Posté(e)

oh punaise j'avais pas pensé à mettre le timeout dans la définition de la socket !

je cherchais à tout pris à le mettre dans la lecture.

 

faut que je teste ça !

 

merci :74:

Posté(e)

ça marche très bien le timeout dans l'initialisation de la socket. :74:

et toujours en utilisant la fonction readUntil().

 

Et c'est bien le retour "error" qui est levé.

ce qui est un peu bête c'est que le message d'erreur retourné dans le cas d'un timeout est

Operation canceled

qui est le même que si y avait une perte de connexion...

Donc difficile de faire la différence entre le timeout et une perte de connexion...

Je pinaille un peu, parce que je voulais faire marche très bien quand même.

 

  • Like 1
×
×
  • Créer...