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 :

Socket client bloquée dans l'état SYN_SENT


Sujet :

C++

  1. #1
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2016
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2016
    Messages : 278
    Par défaut Socket client bloquée dans l'état SYN_SENT
    Bonjour à tous,

    je récapitule pour expliquer la problèmatique:

    - j'ai une socket client en C/C++ (presque le code le plus simple qui existe)
    - je me connecte normalement à la machine serveur distante
    - je tue mon processus client en ne prenant volontairement aucune précaution vis à vis de la déconnexion
    - je relance mon client et là: je me reconnecte au serveur distant quand mon client tourne sous wsl, mais pas quand il tourne sous ubuntu (la socket est bloquée dans l'état SYN_SENT). Si je relance le serveur de la machine serveur distante, je me connecte à nouveau.

    Comment cela peut-il se faire?

    Ce n'est pas un problème de firewall a priori (je l'ai désactivé).
    J'incline à conclure que le port de la machine serveur reste occupé et non ouvert à une autre connection, parce que la précédente n'a pas été fermée proprement. Mais pourquoi cela ne se produirait-il que sous ubuntu?

    merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Vu que tu parles de connexion, je suppose que c'est des sockets TCP. La détection de la déconnexion via timeout peut prendre du temps dans certains cas de perte brutale de connexion comme le tien, donc généralement on ajoute un ping software pour les repérer plus vite.
    Est-ce que le serveur process bien tout asynchrone et ne reste pas bloqué bêtement empêchant de lire la déconnexion ?

    Il y a une poignée d'options qui ont des comportements différents entre Windows et Unix. Et wsl est une bête entre les deux.
    Est-ce que tu utiliserais SO_REUSEADDR ? Ou au contraire, aurais oublié de l'utiliser ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2016
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2016
    Messages : 278
    Par défaut
    Bonjour, merci pour ta réponse.

    Vu que tu parles de connexion, je suppose que c'est des sockets TCP.
    En effet.

    La détection de la déconnexion via timeout peut prendre du temps dans certains cas de perte brutale de connexion comme le tien
    Effectivement, sous wsl c'est de l'ordre de deux minutes. Sous ubuntu j'ai attendu beaucoup plus longtemps, sans réussir à me reconnecter.

    Est-ce que le serveur process bien tout asynchrone et ne reste pas bloqué bêtement empêchant de lire la déconnexion ?
    Désolé, je ne comprends pas la question.

    Est-ce que tu utiliserais SO_REUSEADDR ? Ou au contraire, aurais oublié de l'utiliser ?
    Je l'utilise.

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2016
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2016
    Messages : 278
    Par défaut
    Bonjour, réponse à mon propre fil.

    Tous les tests que nous avons faits laissent penser que wsl comporte un mécanisme qui induit une fermeture propre de la connexion entre le client et le serveur, ce qui n'est pas le cas de l'ubuntu que nous utilisons. Nous travaillons du coup sur le serveur pour gérer cela.

Discussions similaires

  1. Socket client bloquée dans l'état SYN_SENT
    Par tchoalien dans le forum C++
    Réponses: 8
    Dernier message: 29/03/2017, 16h20
  2. [WD12] Client mail par défaut dans les états
    Par jcpas dans le forum WinDev
    Réponses: 3
    Dernier message: 01/04/2010, 10h07
  3. Base bloquée dans l'état "en cours d'arrêt"
    Par puck78 dans le forum Administration
    Réponses: 3
    Dernier message: 11/06/2009, 18h21
  4. Réponses: 20
    Dernier message: 10/07/2006, 16h53
  5. Réponses: 2
    Dernier message: 12/10/2004, 13h04

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