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

Linux Discussion :

Socket AF_INET, SOCK_STREAM - ERRNO 107


Sujet :

Linux

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 52
    Points : 41
    Points
    41
    Par défaut Socket AF_INET, SOCK_STREAM - ERRNO 107
    Bonjour à tous,

    Je suis en pleine conception d'une socket en mode connecté avec gcc.
    Mon problème : J'obtiens toujours l'erreur ERRNO 107 (Transport endpoint is not connected)

    Voici 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
    52
    53
    54
    55
    56
    57
     
    #include<netinet/in.h>
    #include<sys/types.h>
    #include<sys/socket.h>
    #include<string.h>
    #include<strings.h>
    #include<stdio.h>
    #include<stdlib.h>
    #include<errno.h>
    #include<unistd.h>
     
     
    #define MAXCONN 2
    #define TAILLE 20
     
    int main(int argc, char * argv[]) {
    	if ( argc < 2 ) { perror("Parametre manquant [port]"); exit(1); }
    	if ( argc > 2 ) { perror("Parametres supperflus"); }
     
    	struct sockaddr_in serveur, client;
    	int desc, caractere_recu, lg_addr = sizeof(client);
    	char message[TAILLE];
     
    	if ( (desc = socket( AF_INET, SOCK_STREAM, 0)) < 0 ) {
    		perror("Erreur : Creation du socket");
    		exit(1);
    	}
    	serveur.sin_family = AF_INET;
    	serveur.sin_port = htons(atoi(argv[1]));
    	serveur.sin_addr.s_addr = htonl(INADDR_ANY);
    	bzero( &serveur.sin_zero, 8 );
     
    	if ( bind(desc, (struct sockaddr *)&serveur, sizeof(serveur)) < 0 ) {
    		perror("Erreur : Attachement du socket");
    		exit(1);
    	}
     
    	if ( listen(desc,MAXCONN) < 0 ) {
    		perror("Erreur : Ecoute les demandes de connexion");
    		exit(1);
    	}
     
    	if ( accept(desc,(struct sockaddr *)&client, &lg_addr) < 0 ) {
    		perror("Erreur : Accept la connexion");
    		exit(1);
    	}
     
    	if ( (caractere_recu = read(desc, message, sizeof(message))) < 0 ) {
    		printf("errno = %d",errno);
    		perror("Erreur : Reception des donnees");
    		exit(1);
    	}
     
    	printf("[SERVER] Message recu : %s \n",message);
     
    	close(desc);	
    }
    Si quelqu'un avait une idée pour résoudre mon problème, il serait le bienvenue !! Merci !

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 958
    Points : 4 387
    Points
    4 387
    Par défaut
    ENOTCONN (107) c'est read qui peut renvoyer cette erreur, non ?

    (en général on met accept dans une boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while (((retval = accept()) == -1) && (errno == EINTR)) ;
     
    if (retval != -1) {
        // read}
    )

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 52
    Points : 41
    Points
    41
    Par défaut
    ENOTCONN (107) c'est read qui peut renvoyer cette erreur, non ?
    C'est ce que je pensais... cependant, après avoir modifié mon client en réalisant une tempo de 10 secondes avant l'envoi du message, je me suis aperçu que l'erreur 107 est générée bien avant. J'ai donc tourné mes recherches vers un problème provenant de l'accept(), mais rien... Je ne vois pas où est l'erreur. Ma syntaxe est-elle bien correcte?

    J'ai également testé ta méthode en remplaçant par le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	while (((retval = accept(desc,(struct sockaddr *)&client, &lg_addr)) == -1) && (errno == EINTR)) ;
    	if (retval != -1) {
    		if ( (caractere_recu = recv(desc, message, sizeof(message),0)) < 0 ) {
    			printf("errno = %d (%d)",errno,caractere_recu);
    			perror("Erreur : Reception des donnees");
    			exit(1);
    		}
    	}
    Malheureusement, cela ne change rien. J'obtiens toujours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Erreur : Reception des donnees: Transport endpoint is not connected
    errno = 107 (-1)

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 958
    Points : 4 387
    Points
    4 387
    Par défaut
    accept renvoit le descripteur sur lequel vous devez lire ou écrire…
    ou < 0 si une erreur s'est produite…

    donc recv(retval, …) pas recv(desc, …)

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 52
    Points : 41
    Points
    41
    Par défaut
    Merci, cela fonctionne

Discussions similaires

  1. Socket, errno 24 sur accept()
    Par moi4567 dans le forum C++
    Réponses: 11
    Dernier message: 22/12/2014, 14h34
  2. socket.error: [Errno 98] Address already in use
    Par Jackbalek dans le forum Réseau/Web
    Réponses: 0
    Dernier message: 09/07/2014, 10h13
  3. socket.error: [Errno 111] Connection refused
    Par eric0279 dans le forum Programmation multimédia/Jeux
    Réponses: 0
    Dernier message: 03/01/2014, 07h41
  4. Socket Raw & hdrincl Errno 22
    Par redkan dans le forum Réseau
    Réponses: 10
    Dernier message: 10/01/2010, 22h34
  5. [Socket] connect : errno WSAEHOSTUNREACH (10065)
    Par yelbied dans le forum Windows
    Réponses: 2
    Dernier message: 08/06/2007, 16h25

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