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 :

bind plus possible après crash !


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 434
    Par défaut bind plus possible après crash !
    Bonjour, je développe actuellement un jeu réseau et je rencontre un soucis connus (je pense), qui est que la plupart du temps si mon application ne quitte pas proprement à cause d'un crash par exemple, je ne peux plus "binder" le port voulu lors du lancement suivant.

    J'ai essayé d'utilisé ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	BOOL reuse= 1;
    	setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *)&reuse, sizeof(BOOL));
    Mais ça les communication ne semble plus se faire du tout...


    A priori même en désinstallant/réinstallant ma carte réseau le bind est toujours impossible ce qui suppose que la gestion des ports n'est pas matériel du coup il doit bien y avoir un moyen de nettoyer tout ça, une sort de RESET de winsock que je pourrais lancer de mon programme quand ca ne bind pas ?

    Merci

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 485
    Par défaut
    Citation Envoyé par supergrey Voir le message
    J'ai essayé d'utiliser ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	BOOL reuse= 1;
    	setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *)&reuse, sizeof(BOOL));
    Merci
    Peut-être est-ce le type « BOOL » qui est à incriminer. La man page spécifie que ce booléen doit être un entier. Essaie à la place :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	int reuse= 1;
    	setsockopt(sock, SOL_SOCKET, SO_REUSEADDR,&reuse, sizeof(int));

    Pas besoin de caster « &reuse » car le prototype est déjà de type « const void * ».

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 434
    Par défaut
    Merci pour la réponse, cependant je pense que je vais délester le forum de ce topic car, bien qu'après avoir modifié le type BOOL en int la communication semble se faire correctement, je pense que le problème venait d'ailleurs puisque "typedef int BOOL".
    Aussi la fonction ne prend pas un void* en argument chez moi, peut etre que tu parles sous linux ?

    Enfin bref, merci de m'avoir malgrès tout, aidé puisque grâce à toi j'ai réessayé ce SO_REUSEADDR et que ça marche... Reste à voir si le bind merdouillera encore ou pas.

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 434
    Par défaut
    Je ne déleste pas finalement et je confirme que le problème ne venait pas du BOOL.
    En fait il semble que malgrès l'utilisation de SO_REUSEADDR le bind ne se fait pas après un crash, ou du moins le bind ne retourne pas d'erreur mais la communication ne se fait pas du coup c'est pire puisque je ne sais même pas d'ou vient l'erreur, et en redémarrant ma session windows, tout fonctionne à nouveau.

    Donc mon problème est toujours le même, quel composant de windows gère le bind et comment le réinitialisé ?

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 129
    Billets dans le blog
    149
    Par défaut
    Bonjour,

    Souvent, lorsque l'on crash, les sockets ne sont pas fermé correctement.
    Du coup, lorsque l'on redemarre l'application, elle va avoir un problème pour se connecter.
    Sous linux, cela dépend du système, mais la socket est libéré au bout d'un certain moment. Sous windows ...

    Donc, si vous avez un crash, je ne pense pas qu'il viendra de ce point, et vous devez le corriger ( ou faire en sorte que si crash, le programme ferme sa socket ).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. Réponses: 6
    Dernier message: 19/11/2006, 00h41
  2. recupération apres crash driver
    Par gargle dans le forum Windows
    Réponses: 1
    Dernier message: 22/09/2006, 18h02
  3. Plus possible d'ouvrir mes programmes
    Par kameleoon dans le forum Windows XP
    Réponses: 1
    Dernier message: 31/07/2006, 13h46
  4. Réponses: 7
    Dernier message: 06/03/2006, 17h50
  5. Modification de la date d'une table possible après une MAJ?
    Par theseriallooser dans le forum InterBase
    Réponses: 1
    Dernier message: 15/02/2006, 23h03

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