Opened 7 years ago
Closed 6 years ago
#36 closed defect (fixed)
problème timeout tcp socket
Reported by: | Sanahuja Guillaume | Owned by: | Bayard Gildas |
---|---|---|---|
Priority: | major | Milestone: | |
Component: | core | Version: | trunk |
Keywords: | Cc: |
Description
le timeout des tcpsocket pose problème
dans la méthode TcpSocket::Connect, un connect est lancé en non bloquant, puis on teste son état avec un select et un timeout. S'il y a timeout, le socket est fermé, et au coup d'après on relance un nouveau connect etc... Si la réponse arrive donc en retard, il ne s'agit plus du meme socket et un RST est envoyé. La connexion ne peut donc jamais se faire.
Il faudrait aussi comprendre l'utilité du second connect (ligne 174) lorsque le select réussi.
Attachments (1)
Change History (7)
comment:1 by , 7 years ago
Summary: | problème timeout tcp socet → problème timeout tcp socket |
---|
by , 7 years ago
Attachment: | bth_ds3.pcapng added |
---|
comment:2 by , 6 years ago
comment:3 by , 6 years ago
Status: | new → accepted |
---|
comment:4 by , 6 years ago
Resolution: | → fixed |
---|---|
Status: | accepted → closed |
comment:5 by , 6 years ago
Resolution: | fixed |
---|---|
Status: | closed → reopened |
modifications done in this ticket still have a problem: if you launch uav program before (or without) ds3 program, it crashes
comment:6 by , 6 years ago
Resolution: | → fixed |
---|---|
Status: | reopened → closed |
This problem is solved. Actually this exact problem was already solved.
I don't see any error there now. If you see abnormal behaviour please check if it's this very bug involved, or else open a new one
Ce problème est résolu (mais pas testé).
La socket est maintenant réutilisée dans le cas d'un timeout.
Le 2ème connect est nécessaire pour se connecter après un timeout. Le principe est le suivant: on tente un connect. Soit il réussit immédiatement (peu probable je pense) soit on ressort immédiatement et on entre dans l'attente avec le select. Quand on sort de l'attente, soit le timeout est atteint -> on reviendra plus tard sans détruire la socket, soit le timeout n'est pas atteint et il s'est passé qqch. On vérifie qu'il n'y a pas d'erreur et on repart dans notre connect. Cette fois il devrait réussir immédiatement.