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 :

socket bind() sous linux


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 174
    Par défaut socket bind() sous linux
    Bonjour,

    j'ai quelques soucis avec les sockets sous linux et plus précisément avec la fonction bind de mon code :
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    //serveur
     
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <errno.h>
    #include <strings.h>
     
    typedef struct sockaddr_in sockaddr_in;
    typedef struct sockaddr sockaddr;
     
     
     
    int main()
    {
    int serveur;
    int client;
    sockaddr_in confs;
    sockaddr_in confc;
    confs.sin_family = AF_INET;
    confs.sin_addr.s_addr = inet_addr("127.0.0.1");
    confs.sin_port = htons(65460);
     
    if(serveur=socket(AF_INET,SOCK_STREAM,0)!=-1)
    	{
    		printf("fonction socket() ok\n");
     
     
    		if(bind(serveur,(sockaddr *) &confs,sizeof(confs))!=-1)
    		{
    			printf("fonction bind() ok\n");
    			if(listen(serveur,2)!=-1)
    			{
    				printf("fonction listen() ok\n");
    				int ap=sizeof(confc);
    				if(client=accept(serveur,(sockaddr*)&confc,&ap)!=-1)
    				{
    					printf("fonctionaccept() ok\n");
    				}
    			}
    		}
     
    	}
     
     
    return 0;
    }
    une fois compilé(gcc main.c) j'obtiens "fonction socket() ok" mais pas "fonction bind() ok" ce qui me laisse penser à une erreur dans la fonction bind ou dans la structure sockaddr_in mais je ne vois pas où.

    Pouvez vous m'aider?
    merci d'avance

  2. #2
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    utilise perror()!

  3. #3
    Membre chevronné Avatar de jbarreau-mainson
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    446
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 446
    Par défaut
    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
    26
    27
    28
    29
    30
    31
    32
    int main()
    {
    	int serveur;
    	int client;
    	sockaddr_in confs;
    	sockaddr_in confc;
    	confs.sin_family = AF_INET;
    	confs.sin_addr.s_addr = inet_addr("127.0.0.1");
    	confs.sin_port = htons(65460);
     
    	if(serveur = socket(AF_INET,SOCK_STREAM,0) == -1)
    	{
    		puts("fonction socket() : erreur\n");
    	}        
     
    	if(bind(serveur, (sockaddr *)&confs, sizeof(confs)) == -1)
    	{
    		puts("fonction bind() : erreur\n");
    	}
     
    	if(listen(serveur,2) == -1)
    	{
    		puts("fonction listen() : erreur\n");
    	}
     
    	int ap=sizeof(confc);
    	if(client = accept(serveur, (sockaddr*)&confc, &ap) == -1)
    	{
    		puts("fonction accept() : erreur\n");
    	} 
    return 0;
    }
    Si ca ne t'affiche rien c'est que ça marche ...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 174
    Par défaut
    merci pour vos réponse.
    la fonction perror me donne "Socket operation on non-socket" si je la met à la suite du if(bind....:
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    int main()
    {
    int serveur=0;
    int client;
    sockaddr_in confs;
    sockaddr_in confc;
    confs.sin_family = AF_INET;
    confs.sin_addr.s_addr = htonl(INADDR_ANY);
    confs.sin_port = htons(65460);
     
    if(serveur=socket(AF_INET,SOCK_STREAM,0)!=-1)
            {
                    printf("fonction socket() ok\n");
     
     
                    if(bind(serveur,(sockaddr *) &confs,sizeof(confs))!=-1)
                    {
                            printf("fonction bind() ok\n");
                            if(listen(serveur,2)!=-1)
                            {
                                    printf("fonction listen() ok\n");
                                    int ap=sizeof(confc);
                                    if(client=accept(serveur,(sockaddr*)&confc,&ap)!=-1)
                                    {
                                            printf("fonctionaccept() ok\n");
                                    }
                            }
                    }
                    else
                    {
                    perror("bind");
                    }
     
            }
     
     
    return 0;
    }
    jbarreau-mainson, votre code me donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    fonction bind() : erreur
     
    fonction listen() : erreur
     
    fonction accept() : erreur
    donc il s'agit d'un problème avec bind mais je n'arrive pas à trouver où...

  5. #5
    Membre chevronné Avatar de jbarreau-mainson
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    446
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 446

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 174
    Par défaut
    merci pour le lien mais je crains qu'il ne ma pas beaucoup aidé à moins qu'il y a un truc qui m'échappe: je vais le relire au cas où mais je ne pense pas que quelque chose m'a échappé à la première lecture. Peut-être auriez vous d'autres idées?

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par jbarreau-mainson Voir le message
    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
    26
    27
    28
    29
    30
    31
    32
    int main()
    {
    	int serveur;
    	int client;
    	sockaddr_in confs;
    	sockaddr_in confc;
    	confs.sin_family = AF_INET;
    	confs.sin_addr.s_addr = inet_addr("127.0.0.1");
    	confs.sin_port = htons(65460);
     
    	if(serveur = socket(AF_INET,SOCK_STREAM,0) == -1)
    	{
    		puts("fonction socket() : erreur\n");
    	}        
     
    	if(bind(serveur, (sockaddr *)&confs, sizeof(confs)) == -1)
    	{
    		puts("fonction bind() : erreur\n");
    	}
     
    	if(listen(serveur,2) == -1)
    	{
    		puts("fonction listen() : erreur\n");
    	}
     
    	int ap=sizeof(confc);
    	if(client = accept(serveur, (sockaddr*)&confc, &ap) == -1)
    	{
    		puts("fonction accept() : erreur\n");
    	} 
    return 0;
    }
    Si ca ne t'affiche rien c'est que ça marche ...
    Il faut éviter de mélanger les tests et les affectations
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	int serveur= socket(AF_INET,SOCK_STREAM,0);
     
    	if(serveur  == -1)
    	{
    		puts("fonction socket() : erreur\n");
    	}
    ou alors, le faire correctement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	if((serveur = socket(AF_INET,SOCK_STREAM,0)) == -1)
    	{
    		puts("fonction socket() : erreur\n");
    	}
    Attention à la priorité des opérateurs...

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

Discussions similaires

  1. Probleme socket RAW sous linux
    Par wbaccari dans le forum Réseau
    Réponses: 0
    Dernier message: 07/08/2009, 17h16
  2. Configuration de BIND sous linux redhat 9
    Par turbo225 dans le forum Réseau
    Réponses: 5
    Dernier message: 17/12/2008, 21h53
  3. Socket sous Linux & Windows
    Par Jielde dans le forum Linux
    Réponses: 3
    Dernier message: 17/06/2007, 14h04
  4. Réponses: 17
    Dernier message: 15/05/2007, 18h35
  5. Problème erreurs sockets sous Linux
    Par Ange44 dans le forum Linux
    Réponses: 6
    Dernier message: 05/09/2006, 16h16

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