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 C Discussion :

Gestion de timeout


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 27
    Par défaut Gestion de timeout
    Bonsoir,

    Avez-vous une idée sur comment gérer un timeout sur une fonction accédant à un serveur externe? je veux arriver à un code comme celui là:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #define TIMEOUT temps_en_secondes
     
    int start=0;
     
    while(start<TIMEOUT)
    {
    fonction_accédant_a_serveur();
    start=start + une_seconde;
    }
    Merci d'avance pour vos suggestions.

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par kakibend Voir le message
    Avez-vous une idée sur comment gérer un timeout sur une fonction accédant à un serveur externe? je veux arriver à un code comme celui là:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #define TIMEOUT temps_en_secondes
     
    int start=0;
     
    while(start<TIMEOUT)
    {
    fonction_accédant_a_serveur();
    start=start + une_seconde;
    }
    L'idéal serait de modifier la fonction pour qu'elle attende sur select() au lieu de recv(). select() a tout ce qu'il faut pour gérer les timeouts.

    Sinon, il faut jouer avec 2 threads. Un pour l'attente et un pour le timeout.

    Enfin, il y a peut être des réglages systèmes permettant de jouer sur les durées d'attentes.

  3. #3
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 27
    Par défaut
    Tout d'abord Merci pour ta réponse,

    En fait le pb c'est que j'utilise une fonction (libcsoap) soap_client_invoke() qui fait un appel automatique au serveur, donc la gestion du Timeout devrait se faire en amont...Comment faire pour les 2 threads dont tu parles..??

  4. #4
    Membre chevronné Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Par défaut
    salut,

    je pense que tu peut utiliser les options de la socket pour faire capter le timeout :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    struct timeval timeout;
    timeout.tv_sec = SEC_TIMEOUT;
    timeout.tv_usec = USEC_TIMEOUT;
    if ( 0 > setsockopt(ipp_context.ipp_socket, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(struct timeval)) )    {
            DBG_ERR("setsockopt PROBLEM SO_RCVTIMEO");
        }

  5. #5
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 27
    Par défaut
    Merci pour ta réponse.. par contre c'est quoi "ipp_context.ipp_socket"?? Tu penses que cette fonction va manipuler la socket qu'utilise la fonction soap_client_invoke() pour se connecter???

  6. #6
    Membre chevronné Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Par défaut
    non, non ,non,

    c'est une socket appartenant a une structure que j'ai utiliser pour developper un serveur IPP.

    Et j'ai utilisé l'option de lasocket pour capté le temps d'attente sur la reception pour couper la connexion du serveur et non pas du client.....


    En gros, c'est une simple socket, désolé, il falut formater ce code avant ... !

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par kakibend Voir le message
    Comment faire pour les 2 threads dont tu parles..??
    Initiation aux threads :

    http://emmanuel-delahaye.developpez.com/pthreads.htm

  8. #8
    Membre très actif Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Par défaut
    Pour *nix tu peux encore te servir des signaux (SIGALRM)
    non?

    man alarm !
    Compil your life guy!
    The Aures Project

  9. #9
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par kakibend Voir le message
    Bonsoir,

    Avez-vous une idée sur comment gérer un timeout sur une fonction accédant à un serveur externe? je veux arriver à un code comme celui là:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #define TIMEOUT temps_en_secondes
     
    int start=0;
     
    while(start<TIMEOUT)
    {
    fonction_accédant_a_serveur();
    start=start + une_seconde;
    }
    Merci d'avance pour vos suggestions.
    Avec cet exemple il ne vaut mieux pas que fonction_accédant_a_serveur s'eternise pour s'executer.

    tu peux soit utiliser une fonction non bloquante ou la rendre non bloquante.

    alarm c'est sympa ca appelle une fonction de façon périodique tu pourrais t'en servir pour arrêter un thread dédié à la tâche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Creation du thread
    Lancement du thread
    Alarme(5secondes)
    Quant Alarme écoulé Faire
       Arrêter le thread
    Fin Faire
    pour éviter cette gestion des threads il est préférable d'utiliser des fonctions comme select, poll

Discussions similaires

  1. Gestion des timeout
    Par danlyf dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 20/01/2011, 09h30
  2. création de fichiers : gestion du timeout
    Par nicerico dans le forum Langage
    Réponses: 3
    Dernier message: 22/07/2008, 09h04
  3. Gestion de Timeout Perl
    Par the_sebounet dans le forum Web
    Réponses: 5
    Dernier message: 18/06/2007, 23h08
  4. [Struts]Gestion des timeout de session
    Par JohnBlatt dans le forum Struts 1
    Réponses: 3
    Dernier message: 13/12/2004, 14h49
  5. Gestion des timeout
    Par poinclin dans le forum CORBA
    Réponses: 6
    Dernier message: 08/07/2004, 23h40

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