jjacques68 Posté(e) le 16 janvier 2021 Signaler Partager Posté(e) le 16 janvier 2021 (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é le 16 janvier 2021 par jjacques68 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Lazer Posté(e) le 16 janvier 2021 Signaler Partager Posté(e) le 16 janvier 2021 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
jjacques68 Posté(e) le 16 janvier 2021 Auteur Signaler Partager Posté(e) le 16 janvier 2021 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
jjacques68 Posté(e) le 16 janvier 2021 Auteur Signaler Partager Posté(e) le 16 janvier 2021 ça marche très bien le timeout dans l'initialisation de la socket. 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. 1 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Lazer Posté(e) le 16 janvier 2021 Signaler Partager Posté(e) le 16 janvier 2021 Je pense que c'est normal, ce que tu appelles la "perte de connexion" c'est la même chose que l'absence de communication. Lien vers le commentaire Partager sur d’autres sites More sharing options...
jjacques68 Posté(e) le 16 janvier 2021 Auteur Signaler Partager Posté(e) le 16 janvier 2021 j'ai quand même relu plusieurs fois ta phrase et bien dit comme ça, c'est claire oui Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés