IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau/Web Python Discussion :

Simuler un connect défectueux


Sujet :

Réseau/Web Python

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 114
    Points : 129
    Points
    129
    Par défaut Simuler un connect défectueux
    Bonjour

    Je cherche à vérifier le comportement de mon application avec un time out sur le connect.

    En production, j'ai des fonctions "connect()" qui mettent 5 minutes à tomber à time out et cette durée longue déclenche d'autre bug. Bien sur, comme c'est en production, je ne peux travailler directement sur ce contexte.

    J'essaye de reproduire cela sur mon poste de développement. Mes premiers essais ont consistés à ne pas démarrer de serveur. Dans ce cas le connect échoue de suite, et cela ne m'aide pas à reproduire mon bug de fond.

    Je cherche donc une méthode pour avoir par exemple un "accept()" bidouillé qui fait la moitié du boulot : il reçoit le paquet de demande de connexion, mais n'envoi pas de confirmation par exemple. Ainsi mon connect() en face se mettra en attente, puis tombera en time out, et ainsi j'aurais déjà reproduit mon bug (ensuite je me débrouillerai pour le fixer).

    Est-ce que quelqu'un à une idée pour m'aider ?

    Cordialement
    Emmanuel

  2. #2
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    Ne peux-tu pas créer rapidement un petit serveur de timeout ? (marrant comme concept )

    (Le code ressemblerait à ça, à quelques miette de pain près)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    >>> from socket import socket, AF_INET, SOCK_STREAM, error as SocketError
    >>> serv = socket(AF_INET, SOCK_STREAM)
    >>> host = "localhost"
    >>> port = 8080
    >>> 
    >>> addr = (host, port)
    >>> 
    >>> serv.bind(addr)
    >>> serv.listen(1)
    >>> 
    >>> try:
    ...     while 1:
    ...         read, write, error = select([serv], [], [], 1)
    ...         
    ...         try:
    ...             while 1:
    ...                 client, (chost, cport) = server.accept()
    ...         except SocketError:
    ...             # Plus de client a recevoir
    ...             pass
    ... finally:
    ...     serv.close()

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 114
    Points : 129
    Points
    129
    Par défaut
    merci pour la réponse.

    J'ai essayé. Pour être précis, voilà le programme exact que j'ai essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    import socket
    import select
     
    serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    host = ''
    port = 3000
     
    serv.bind( (host, port) )
    serv.listen( 1 )
     
    try:
            while 1:
                    read, write, error = select.select( [serv], [], [], 1)
     
                    try:
                            while 1:
                                    client, (chost, cport) = serv.accept()
                                    print "accept :", client, chost, cport
                    except socket.error:
                            # plus de client a recevoir
                            print "socket error"
                            pass
     
    finally:
            serv.close()
    En mettant en oeuvre ce programme et travaillant sur le sujet, je suis aussi en mesure de préciser ma demande car ce programme ne répond pas à ma demande.


    Quand on appel une fonction connect, il y a deux paquets qui circulent sur le réseau (merci Wireshark pour tous ces détails). On appel "src" la source, la machine sur laquelle est exécuté le "connect". On appel "dst" la machine qui a serveur en attente.
    Les paquets sont :
    1 : src -> dst paquet SYN
    2 : dst -> src paquet SYN ACK.

    Si on oublie de lancer le serveur distant, on a les deux paquets suivant :
    1 : src -> dst paquet SYN
    2 : dst -> src RST ACK (refus de connexion)


    Je souhaite avoir un serveur modifier pour tester le cas ou il n'y a aucun paquet en retour pour déclencher un "time out" sur le connect.

    Si je débranche le câble réseau, j'ai une erreur "no route to host".

    Est-ce que quelqu'un a une idée de comment procéder pour avoir un time-out à volonté sur l'appel connect.

    Cordialement
    Emmanuel

  4. #4
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    Ow, tu dois visiblement jouer au niveau du protocole tcp.
    Là ce n'est plus du ressort de Python, mais bien de l'os même il me semble. A confirmer, mais ça ne m'étonnerait pas que tu doives aller visiter une couche en dessous

Discussions similaires

  1. [2012] Windows authentication simulate connection
    Par vinch999 dans le forum Administration
    Réponses: 2
    Dernier message: 09/03/2015, 11h01
  2. Réponses: 0
    Dernier message: 14/12/2014, 18h01
  3. couper une connection avec un serveur corba
    Par pons dans le forum CORBA
    Réponses: 3
    Dernier message: 31/05/2002, 10h11
  4. Réponses: 3
    Dernier message: 22/05/2002, 09h37
  5. [Kylix] Pb connection à Mysql
    Par Anonymous dans le forum EDI
    Réponses: 3
    Dernier message: 25/04/2002, 15h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo