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

 C Discussion :

mon programme C se fige apres une sortie de veille de win


Sujet :

C

  1. #1
    Membre du Club
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    82
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 82
    Points : 57
    Points
    57
    Par défaut mon programme C se fige apres une sortie de veille de win
    salut a tous je pense a voir tout dit dans le titre je lance mon programme normalement , une fois que windows se met en veille prolongé et que j'en sors , mon programme est toujours ouvert mais est figé que faire pour qu'il se relance ou continue sa fonction ? ( client irc en C )

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 622
    Points
    23 622
    Par défaut
    Il est probable que ce ne soit pas la mise en veille qui fige ton programme, mais que cela provoque un effet de bord que ton programme n'a pas prévu. C'est probablement dû au fait que la connexion a dû se refermer dans l'intervalle.

    Vérifie si c'est bien le cas.

  3. #3
    Membre du Club
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    82
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 82
    Points : 57
    Points
    57
    Par défaut
    non j'ai testé le programme ouvert pendant une journée complete et il tient mais si je met le pc en veille prolongé et que je resors ben le programme est figé :s alors que la connection est actif .

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 622
    Points
    23 622
    Par défaut
    Comment sais-tu que la connexion est encore active si ton programme est figé ? Quel outil utilises-tu ?

  5. #5
    Membre du Club
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    82
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 82
    Points : 57
    Points
    57
    Par défaut
    je regarde mes flux de connection par cmd.exe et je vois que la connection est active mais pourtant sur mon client je suis plus connecté c est pour cela que je dit qu'il est figé ( recois plus de octet , ...)

    avec la fonction fork() ou/et WaitForSingleObject() je peux réglé ce problème?

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 622
    Points
    23 622
    Par défaut
    Comme je te le dis, il n'y a pas de raison pour que ton programme soit « figé » en soi. Et si c'est vraiment le cas, les fonctions en question ne serviront à rien puisqu'il ne pourra pas les appeler.

    Je suis presque sûr que durant la veille prolongée — pendant laquelle le réseau est inactif comme le reste — un timeout a lieu quelque part le long de la chaîne qui relie ton client à ton serveur. S'il y a un équipement réseau un minimum intelligent entre les deux, le fait que le lien vers ton serveur soit hors-tension peut suffire à produire un code ICMP « Host Unreachable » et, donc, pousser le système du client à refermer la connexion.

    Et si celui-ci n'est pas prévu pour gérer les erreurs, il va rester ouvert lui-aussi, mais la connexion sera bien morte et le système ne lui acheminera plus rien. En sortant de mise en veille, ton serveur rétablira peut-être son environnement comme si de rien n'était (ce qui est déjà une lacune au niveau de la conception), mais les clients, eux, ne l'auront pas attendu.

    Enfin, n'oublie pas que TCP (si c'est bien ce que tu utilises) est une simulation de flux à partir des paquets sous-jacents. Il n'y a pas de porteuse ni de signal distinct prévenant qu'une connexion est refermée autre que la refermeture par protocole, ou via des signaux d'une couche inférieure que le système serait à même de recevoir. Si une machine distante décide soudainement d'ignorer silencieusement tes paquets, ta connexion apparaîtra toujours comme ouverte, alors qu'il n'y en aura aucune trace sur le reste du réseau (sauf firewalls « stateful »).

    Par contre, il y a un cas de figure sous Unix, au moins, qui ressemble un peu à ça : un processus peut être suspendu (et repris manuellement là où il en était) soit explicitement, soit sur certains cas de figure, notamment lorsqu'il essaie de lire l'entrée standard alors qu'il est en tâche de fond. À ma connaissance, il existe au moins SuspendThread sous Windows, mais il n'y a aucune raison pour que le réseau mette un thread dans cet état.

  7. #7
    Membre du Club
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    82
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 82
    Points : 57
    Points
    57
    Par défaut
    ok ok j''ai compris mais que faire alors pour que mon client se reconnecte apres cette interruption ou reprenne son fonctionnement normal.


    edit : merci de ton aide en tout cas .

  8. #8
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 622
    Points
    23 622
    Par défaut
    Ça fait un moment que je n'utilise plus Windows, mais il y a ici un fil qui traite d'un cas similaire. Finalement, ton problème relève peut-être de la configuration système :

    http://forum-vista-seven.1fr1.net/t2...ille-prolongee

  9. #9
    Membre du Club
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    82
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 82
    Points : 57
    Points
    57
    Par défaut
    merci mais non c'est pas le meme probleme car mon pc se reconnecte normalement c est juste mon code qui .... enfin veut pas se reconnecté apres la sortie de la mise en veille alors qu'il apparait connecté dans mes flux , je suis d'accord que la mise en veille prolongé coupe tout mais normalement mon socket doit revivre apres avoir été couper enfin je pense .

  10. #10
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 622
    Points
    23 622
    Par défaut
    Lorsque cela arrive, as-tu les moyens de vérifier si les connexions côté client sont toujours actives elles aussi ?

  11. #11
    Membre du Club
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    82
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 82
    Points : 57
    Points
    57
    Par défaut
    salut , je vais faire le test et voir comment le socket se déconnecte via un autre pc et je vous tiens au courant

  12. #12
    Membre du Club
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    82
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 82
    Points : 57
    Points
    57
    Par défaut
    je up le post , mon socket se deconnecte en client ping time out sa c 'est pas un soucis , mais le truc c est que mon code reprend pas ou est bloqué a la reprise de windows je comprend pas ce qu'il faut faire pour que mon client reste actif apres ou reprenne du services :s


    dans un boucle = while(1)

    linterruption du systeme peut il provoquer un bloquage de la boucle ?

  13. #13
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 622
    Points
    23 622
    Par défaut
    Montre-nous ton code.

    Soit tu as fait un vrai serveur IRC multi-client avec select() et dans ce cas, ton client doit être capable d'ouvrir une nouvelle connexion malgré celle qui est morte, soit tu as fait un système client-serveur mono-connexion et, dans ce cas, ni ton serveur ni ton système ne savent que le client a raccroché puisqu'ils dormaient. C'est d'ailleurs à ça que servent les ping timeouts : à vérifier si l'homologue est toujours en vie. Même sans incident réseau, il est toujours possible que l'un ou l'autre plante, en entrant dans une boucle infinie par exemple, auquel cas le système n'aurait aucune raison de refermer la connexion lui-même.

    En même temps, c'est quand même bizarre de mettre un serveur en veille…

  14. #14
    Membre du Club
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    82
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 82
    Points : 57
    Points
    57
    Par défaut
    En même temps, c'est quand même bizarre de mettre un serveur en veille…
    ben c est un client mirc pour tchatter donc il doit resté ouvert tout le temps

    ok je suis les conseils

  15. #15
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Shark9 Voir le message
    ben c est un client mirc pour tchatter donc il doit resté ouvert tout le temps
    euh... Ah quoi ça sert si l'ordi est éteint ??

    En veille prolongée c'est quasi éteint, en tous cas c'est plus interactif..

    Donc pour un tchat, c'est un peu.... étrange, non ???
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  16. #16
    Membre du Club
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    82
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 82
    Points : 57
    Points
    57
    Par défaut
    heuu ...

    j'explique vue que ... bref

    un client mirc c est un logiciel qui reste ouvert tout le temps si le logiciel est ouvert et pas devant le pc ( peut etre 2 3 ou ... heure ) le pc se met en veille prolongé hein ?
    donc a mon retour si jerevien sur le pc je sors de la mise en veille prolongé pour utilisé mon logiciel .... souviron34

  17. #17
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 622
    Points
    23 622
    Par défaut
    Citation Envoyé par Shark9 Voir le message
    un client mirc c est un logiciel qui reste ouvert tout le temps si le logiciel est ouvert et pas devant le pc ( peut etre 2 3 ou ... heure ) le pc se met en veille prolongé hein ? donc a mon retour si jerevien sur le pc je sors de la mise en veille prolongé pour utilisé mon logiciel .... souviron34
    Et c'est précisément pour ces raisons que les serveurs comme les clients IRC sont prévus pour envoyer des PINGs à leurs homologues. Ceux-ci doivent donc être là pour y répondre.

    Il faut donc garantir le minimum vital pour que cette transaction soit effectuée. Maintenant, cela peut se faire dans un état très dégradé : écran éteint, disque dur arrêté, mémoire au minimum si possible et fréquence du processus au plus bas avec le CPU frequency scaling.

    Par contre, un suspend to disk, ça consiste à enregistrer l'état entier de l'ordinateur (généralement dans le swap) et l'éteindre, pour le recharger d'un coup au redémarrage et revenir au dernier état connu, donc. Il n'en reste pas moins que le PC est arrêté.

    Essaie d'autres modes de veille en apportant un soin particulier à la façon dont le réseau est géré dans ces états.

  18. #18
    Membre du Club
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    82
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 82
    Points : 57
    Points
    57
    Par défaut
    je up le sujet car je pense avoir trouvé une solution mais toujours avec un nouveau soucis
    =
    http://www.developpez.net/forums/d10...t/#post5915258

    mais en rapport avec ce sujet .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CS3] Mon programme ne fonctionne plus après une copie
    Par Jeffreyshep dans le forum Flash
    Réponses: 1
    Dernier message: 05/09/2014, 10h24
  2. Réponses: 6
    Dernier message: 18/08/2011, 13h19
  3. Mon programme ne fonctionne plus après mise à jour de linux
    Par dybmans dans le forum GTK+ avec C & C++
    Réponses: 22
    Dernier message: 06/05/2007, 18h08
  4. Mon programme ne marche pas aprés le if:?
    Par mitherkiller dans le forum C
    Réponses: 28
    Dernier message: 28/03/2007, 19h47
  5. Réponses: 2
    Dernier message: 29/12/2005, 10h25

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