Forum général.cherche-logiciel Serveur avec connexion unique.

Posté par  .
Étiquettes : aucune
0
2
oct.
2007
Bonjour,

J'aimerai realiser un serveur qui n'accepte qu'une seule connexion. Ce serveur doit être dédié au client qui se connecte en premier. j'ai l'option backlog à 0, mais mon deuxième client arrive toujours a se connecter.
Est ce que quelqu'un connaitrait l'option qui autorise une seule connexion.
  • # Euh ?

    Posté par  . Évalué à 0.

    Euh, de quel serveur parles-tu ?

    Pour la connection unique, il y a netcat:
    nc -l -p 8080
    • [^] # Re: Serveur Unix

      Posté par  . Évalué à 2.

      En fait je parle d'un serveur que je programme sous linux en C. Donc j'aimerai connaitre l'option a utiliser avec la fonction setsocketopt.

      Je vous remercie d'avance.
  • # Paramètre backlog...

    Posté par  (site web personnel) . Évalué à 2.

    Salut,

    Le paramètre backlog ne fera pas ce que tu veux pour la valeur 0 : zéro positionne la taille de la file de requêtes à la taille par défaut de l'OS, et non pas à zéro. Celà ne te semble pas acceptable de fermer les autres connexions entrantes ?
    • [^] # Re: Paramètre backlog...

      Posté par  . Évalué à 1.

      Bonjour,

      En fait le programme serveur est une machine d'état. Dans l'initialisation de la machine d'état, le serveur ouvre la connexion avec listen, ensuite dans le premier état il accepte une connexion, et suit sa machine d'état. C'est un mono thread, donc je ne repasse plus par la fonction accept, jusqu'a la fin du traitement. De son coté le client se connecte au serveur avant de commencer sa machine d'état. L'inconvénient, c'est que le deuxieme client a un retour positif de sa connexion, et déroule lui aussi sa machine d'état. Ce qui me fait deux client sur le meme serveur, et le serveur s'enmele les crayons. Et moi je voudrais que la connexion lui soit refusé et qu'il attende que le serveur soit libre.

      je vous remercie par avance.
      • [^] # Re: Paramètre backlog...

        Posté par  . Évalué à 3.

        Poste ton code dans un coin ce sera plus simple. Mais à priori, quand tu fais un accept() sur un socket, l'appel te renvoie un nouveau socket correspondant à ton client sans toucher à l'ancien socket (man 2 accept), il te suffit alors de fermer l'ancien...
        En gros:


        sock = socket(...);
        bind(sock,...);
        listen(sock,1);
        new_sock = accept(sock,...);
        close(sock);


        Ca fait un petit moment que j'ai pas fait de C, corrigé moi donc si je me trompe.
      • [^] # Fonction accept()

        Posté par  (site web personnel) . Évalué à 1.

        Je crois que tu n'a pas compris l'interêt de la fonction accept.

        Les socket tcp sont on va dire 'mono-connection' aussi quand on désire faire un système multi-utilisateurs on défini une socket <<d'appel>> ou <<de signalisation>>.

        Quand le client se connecte sur ce port de signalisation le serveur, via la commande accept() redirige cette connection sur une autre socket.
        Ex: 1.1.1.1 se connecte a 1.1.1.2 sur depuis le port 1234 sur le port 80.
        le serveur accept la connection et 1.1.1.1 et 1.1.1.2 se parlent via les ports 1234 (1.1.1.1) et 4567 (1.1.1.2)
        et ceci afin de laisser le port 80 disponible pour d'autres).

        Toi ce que tu veut c'est justement le fonctionnement normal d'une socket, il te suffit de creer ta socket d'ecoute et de la lire (ou d'utiliser select() pour valider que quelqu'un est connecté).

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.