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 :

connect() - result too large


Sujet :

Réseau C

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 58
    Par défaut connect() - result too large
    Bonjour,
    j'ai un problème pour me connecter avec mon client à mon serveur(qui fonctionne très bien avec un client telnet)

    le 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
    int main()
    {
        WSADATA WSAData;
        if(WSAStartup(MAKEWORD(2,0), &WSAData)==0)
       {
        int serveur9=0;
        SOCKADDR_IN confserv8;
        confserv8.sin_family = AF_INET;
        confserv8.sin_port=htons(80);
        confserv8.sin_addr.s_addr=inet_addr("192.168.0.1");
        if((serveur9=socket(AF_INET,SOCK_STREAM,0))!=-1)
        {
            if(connect(serveur9,(SOCKADDR *)&confserv8,sizeof(confserv8))!=-1)
            {
                printf("connection ok\n");
            }
            else
                perror("connect");
        }
        else
            perror("socket");
        WSACleanup();
        }
        return 0;
    }
    et j'obtient le message
    Connect : Result too large
    Qu'est ce que ça veut dire? comment le résoudre?

    merci

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Bonjour,

    Pour avoir plus d'indication sur l'erreur, il faut lire la page de manuel de la function connect()
    Après, il faut aussi savoir, que pour de telle problème, l'utilisation de l'outil strace est super. ( Et puis ça va indiquer le code d'erreur, que l'on pourra vérifié avec le manuel pour avoir plus d'indication )

    Utilisation de strace:
    strace ./leProgramme
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 58
    Par défaut
    merci pour la réponse.
    strace n'est pas disponible sur windows aparement donc je ne peux pas l'utiliser.
    Pour le code d'erreur c'est 34.
    Il y a autre chose de bizarre aussi c'est que quand je le met dans un thread l'erreur du perror() devient après un certain temps:
    connect: No error
    qui corespond au code 0. c'est une erreur bizarre^^.
    le code avec le thread:
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <winsock2.h>
    #include <pthread.h>
    typedef struct sockc sockc;
    struct sockc
    {
        int client,serveur;
        SOCKADDR_IN confclient,confserv;
        char buffer;
    };
    void localr(sockc *sock0)//thread
    {
        sockc sock=*sock0;
        sock.confserv.sin_family = AF_INET;
        sock.confserv.sin_port=htons(8118);
        sock.confserv.sin_addr.s_addr=inet_addr("81.165.4.253");
        if((sock.serveur=socket(AF_INET,SOCK_STREAM,0))!=-1)
        {
            if(connect(sock.serveur,(SOCKADDR *)&sock.confserv,sizeof(sock.confserv))!=-1)
                printf("connection ok");
            else
                perror("connect");
     
        }
        else
            perror("socket");
    }
    int main()
    {
        WSADATA WSAData;
        if(WSAStartup(MAKEWORD(2,0), &WSAData)==0){
        pthread_t th0;
        sockc client;
     
     
    pthread_create(&th0, NULL, localr, &client);
    system("pause");
        WSACleanup();
        }
        return 0;
    }
    Donc j'ai toujours un problème mais ce qui est bizarre c'est que l'erreur n'est pas la même quand le code concerner est dans le main() et lorsque il est dans le thread.

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Pour le code d'erreur '0' c'est facile à expliquer.
    Les fonctions qui ne plantent pas, vont écrire zero pour la variable de perror() pour dire quelles ont bien réussi ... cela peut bien entendu écraser l'ancienne valeur ( qui était une erreur ) de la variable. Donc, l'erreur est juste cacher.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Pour l'erreur, j'ai un peu plus chercher.

    Je pense que c'est à cause de la structure 'confserv8' qui est mal remplie.
    Première remarque, sous Linux, on m'avait dit que les port < 1024, n'était accéssible que par root ( donc il y a une restriction sur ce point ). Je ne sais pas trop de ce qu'il en est sous windows.
    Zut vous l'avez enlevé par la suite.

    Deuxième point, vous ne vérifiez pas si inet_addr() retourne une erreur. Ceci peut être la cause de votre problème. Dans ma documentation ( linux manpages ) il est dit que inet_addr() est obsolète. Qu'il faut mieux utiliser inet_aton()
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. Lecture fichier texte - Exception (Result too large)
    Par HELKARROUMI dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 19/05/2014, 17h07
  2. recv(): Result too large
    Par Trietch dans le forum Réseau
    Réponses: 4
    Dernier message: 28/04/2014, 22h59
  3. bind: Result too large
    Par Trietch dans le forum Réseau
    Réponses: 8
    Dernier message: 26/07/2013, 02h39
  4. Réponses: 1
    Dernier message: 22/07/2005, 13h32
  5. Error 124 : statement part too large
    Par cedchantrel dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 29/03/2005, 10h30

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