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 :

Detection coupure de connexion Tcp


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 104
    Par défaut Detection coupure de connexion Tcp
    Bonsoir,

    Voila, j'ai un code qui se connecte sur un serveur (jusqu'a là normal).

    J'aurais juste voulu connaitre un moyen qu'a le client de detecter une éventuelle coupure.

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 527
    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 527
    Par défaut
    Citation Envoyé par Flob91 Voir le message
    j'ai un code qui se connecte sur un serveur (jusqu'a là normal). J'aurais juste voulu connaitre un moyen qu'a le client de detecter une éventuelle coupure.
    Tu travailles sur quel système d'exploitation et tu utilises quels outils pour te connecter à ton serveur ?

    Si ce sont des sockets sous Unix, read() te renvoie toujours la longueur du paquet lu. Par convention, une longueur nulle est considérée par le lecteur comme une refermeture à l'initiative de l'homologue.

    Pour le reste, ça fonctionne comme un tube : si tu essaies d'écrire dedans alors qu'il ne fonctionne plus (pour quelque raison que ce soit), tu reçois un SIGPIPE mettant automatiquement fin à ton programme s'il n'est pas intercepté.

  3. #3
    Membre éprouvé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 104
    Par défaut
    salut

    En faite, je suis sous Linux.

    En faite, c'est pas en terme de reception, mais en terme d'envoi. J'ai un client, et je voudrais savoir si je suis toujours connecté au serveur (sinon l'envoi fait bloquer le programme).

    Merci.

  4. #4
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    C'est pareil. Le fait que send ou recv (ou read ou write) retourne 0 indique que la connexion a été coupée. Il n'y a pas blocage.

  5. #5
    Membre éprouvé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 104
    Par défaut
    Citation Envoyé par Melem Voir le message
    C'est pareil. Le fait que send ou recv (ou read ou write) retourne 0 indique que la connexion a été coupée. Il n'y a pas blocage.
    Mon probleme est que "justement" il y a blocage dans mon cas.
    Quand on coupe le serveur (volontairement ou non), le client envoi les données (cela retourne le nombre d'octets correspondant), le coup suivant, lorsque le client envoi ses données, il bloque tout simplement.

    voici, la partie initialisation de connexion du programme
    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
    	int res;
    	int opt = 1 ;
     
    	// si sock !=0 alors on a eu un probleme de connexion
     
    	close(sock);
    	sock = socket(AF_INET, SOCK_STREAM, 0);// declaration du socket
     
    	if(sock == 0)// On verifie que le socket est ouvert
    		return false; //  on arrete tout sinon
     
    	SOCKADDR_IN socketin ={0};
    	// on entre les données du serveur.
    	socketin.sin_addr.s_addr	= inet_addr(host); // l'adresse Ip
    	socketin.sin_port 	= htons(port); // le port 
    	socketin.sin_family = AF_INET; // le protocole d'ip.
     
    	res = connect(sock,(SOCKADDR *) &socketin, sizeof(SOCKADDR));// on s'y connecte
     
    	if(res == SOCKET_ERROR)
    	{
    		close(sock);
    		return false;// si la connexion a echoué...
    	}
    		return true; // la connexion a reussi...

  6. #6
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Et si tu spécifiais un timeout sur ton socket (setsockopt(s, SOL_SOCKET, SO_SNDTIMEO, ...)) ? Si un send n'aboutit pas au bout de quelques secondes, c'est assez louche. Là tu peux tester l'état de la connexion (voir si gethostbyname marche par exemple) et agir en conséquence.

Discussions similaires

  1. Connexion TCP: comment vérifier la connectivité?
    Par J-F dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 21/03/2006, 16h53
  2. FTP qui prennent en charges les coupures de connexion
    Par denza1 dans le forum Développement
    Réponses: 2
    Dernier message: 14/01/2006, 19h46
  3. Connexion TCP/IP sans carte réseau
    Par Grand2000 dans le forum Administration
    Réponses: 16
    Dernier message: 13/01/2006, 19h21
  4. Petit souci sur la libération d'une connexion tcp
    Par alexandre75 dans le forum Développement
    Réponses: 1
    Dernier message: 08/11/2005, 20h43
  5. [Librairies] PHP et MSDE pb lors de l'activation de connexion TCP IP
    Par SPA dans le forum Bibliothèques et frameworks
    Réponses: 8
    Dernier message: 14/10/2005, 22h46

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