Forum Programmation.python Socket un peu trop bloquants ...

Posté par .
Tags : aucun
1
15
mar.
2010
Bonjour les moules,

je suis en train de développer un petit serveur python en utilisant le framework intégré en mode connecté (TCP).

Tout fonctionne très bien, si ce n'est qu'une fois sur 4 en moyenne, mon self.request.recv(8192) bloque pour une raison totalement inconnue.

J'utilise pour tester un petit script en php qui se connecte, fait 3 envois et réceptions de données et se déconnecte normalement proprement. Bizarrement, si il peut y avoir un certain nombre d'execution qui fonctionnent sans soucis, il arrive toujours bien une éxécution qui bloque sur la première réception de données.

J'ai vérifié grâce à wireshark, l'envoi des données au serveur est bien faite, j'obtiens même un ACK pour accuser la réception des données.

Par contre, le recv attends toujours des données.

http://pastebin.com/R5EU7GGw pour la fonction qui s'occupe de traiter les flux entrants et sortants...

Quelqu'un aurait il le pourquoi du comment ça bloque dans certains cas ? Et/ou le comment éviter ? Je suis aussi ouvert à toute critique sur le code, je découvre le python ;)
  • # bon...

    Posté par . Évalué à 2.

    Tu n'as pas de réponse parce que, comme ça, ça paraît vraiment étrange.
    Pourrais-tu faire un "netstat -pa | grep python" lorsque tu lances ton script, pour voir si les données sont dans la recv-q du socket ?
    Quelle taille font les données que tu envoies ? Parce que si elles sont supérieures à la taille de ton socket buffer, elles peuvent être droppées.
    Que renvoie "sysctl -a | egrep 'wmem|rmem'" ?

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.