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 :

bind: Result too large


Sujet :

Réseau C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 10
    Points : 7
    Points
    7
    Par défaut bind: Result too large
    Salut tout le monde j'ai un problème avec 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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    #if defined (WIN32)
        #include <winsock2.h>
        typedef int socklen_t;
    #elif defined (linux)
        #include <sys/types.h>
        #include <sys/socket.h>
        #include <netinet/in.h>
        #include <arpa/inet.h>
        #include <unistd.h>
        #define INVALID_SOCKET -1
        #define SOCKET_ERROR -1
        #define closesocket(s) close(s)
        typedef int SOCKET;
        typedef struct sockaddr_in SOCKADDR_IN;
        typedef struct sockaddr SOCKADDR;
    #endif
     
    #include <stdio.h>
    #include <stdlib.h>
    #define PORT 23
     
     
    int main(void)
    {
     
     
        #if defined (WIN32)
            WSADATA WSAData;
            int erreur = WSAStartup(MAKEWORD(2,2), &WSAData);
        #else
            int erreur = 0;
        #endif
     
        SOCKADDR_IN sin;
        SOCKET sock;
        socklen_t recsize = sizeof(sin);
     
        SOCKADDR_IN csin;
        SOCKET csock;
        socklen_t crecsize = sizeof(csin);
     
        int sock_err;
        int test = 0;
     
     
     
        if(!erreur)
        {
            sock = socket(AF_INET, SOCK_STREAM, 0);
     
            if(sock != INVALID_SOCKET)
            {
                printf("La socket %d est maintenant ouverte en mode TCP/IP\n", sock);
     
     
     
                sin.sin_addr.s_addr = inet_addr("128.0.0.1");
                sin.sin_family = AF_INET;                 /* Protocole familial (IP) */
                sin.sin_port = htons(PORT);               /* Listage du port */
                sock_err = bind(sock, (SOCKADDR*)&sin, recsize);
     
                if(sock_err != SOCKET_ERROR)
                {
                    sock_err = listen(sock, 5);
                    printf("Listage du port %d...  \n", PORT);
     
                    if(sock_err != SOCKET_ERROR)
                    {
                        printf("Patientez pendant que le client se connecte sur le port  %d ...\n", PORT);
                        csock = accept(sock, (SOCKADDR*)&csin, &crecsize);
                        printf("Un client se connecte avec la socket %d de %s:%d\n", csock, inet_ntoa(csin.sin_addr), htons(csin.sin_port));
     
                        while(1)
                        {
     
                        }
                    }
                    else
                        perror("listen");
                }
                else
                    perror("bind");
     
     
                printf("Fermeture de la socket client\n");
                closesocket(csock);
                printf("Fermeture de la socket serveur\n");
                closesocket(sock);
                printf("Fermeture du serveur terminée\n");
            }
            else
                perror("socket");
     
            #if defined (WIN32)
                WSACleanup();
            #endif
        }
        return EXIT_SUCCESS;
    }

    Avec 127.0.0.1 ça fonctionne, mais avec une autre IP genre 25.63.188.251 ça me renvoie "bind: Result too large"

    Des solutions s'il vous plait?

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 480
    Points : 13 677
    Points
    13 677
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Peut-on connaitre le système d'exploitation utilisé ?

    Pour cette adresse ?

    Personnellement, si je l'utilise, j'ai en sortie :
    La socket 3 est maintenant ouverte en mode TCP/IP
    bind: Can't assign requested address
    Fermeture de la socket client
    Mais on dirait que je l'ai quelque soit l'adresse que je mette... Mac OS X n'aime peut-être pas quelque chose...

    As-tu essayé avec un autre port, de préférence un grand numéro (genre 14685) ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Alors, j'utilise Windows 7 64 bits.

    C'est a dire cette adresse?

    Avec un autre grand port cela ne fonctionne toujours pas

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 480
    Points : 13 677
    Points
    13 677
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Trietch Voir le message
    C'est a dire cette adresse?
    En fait, je voulais dire "pourquoi".... --> 25.63.188.251
    Essaye avec l'adresse IP de ton PC. Si tu veux te mettre à l'écoute, c'est mieux d'être à l'écoute sur ta propre adresse, non ?

    Dans le cas d'erreur du bind(), pourrais-tu rajouter l'affichage de errno ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #include <errno.h>
    [...]
    perror("bind");
    printf("Errno = %d\n", errno);
    PS : j'arrive finalement à ne pas avoir de message d'erreur en écrivant correctement mon adresse IP...

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    25.63.188.251 -> Car c'est l'IP de mon réseau hamachi
    Mais normalement, même avec une IP au hasard, le bind devrait fonctionner, ça devrais juste être après que l'erreur intervient vu qu'il ne pourra pas ce connecter non?

    Errno = 34

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 480
    Points : 13 677
    Points
    13 677
    Billets dans le blog
    1
    Par défaut
    J'ai réussi à te pinger mais j'ai pas pu faire de reserve dns sur cette adresse (mais chui pas un pro de ce genre de manip ^^).

    Est-ce que c'est l'adresse de ton PC, celui depuis lequel tu exécutes le code ?

    Perso, mon IP est 192.168.0.11 et si je mets sin.sin_addr.s_addr = inet_addr("192.168.0.12");, j'ai l'erreur que je te décris plus haut.

    Ton code est le code d'un serveur. Il binde un socket sur une adresse et un port et ensuite attends les connexions entrantes. Il faut donc bien qu'il puisse se mettre à l'écoute sur une adresse valide. De ma petite expérience en réseau, c'est pour moi la que c'est le plus logique que ça échoue. Si le socket est bindée et à l'écoute, personne ne pourra se connecter à toi à cette adresse puisque ce n'est pas la tienne.

    De plus, je lis ici (1ère réponse) que Windows ne positionne pas errno pour les sockets. Avant le bind, peux-tu rajouter errno = 0 ? Peux-tu aussi rajouter un appel à WSAGetLastError() et afficher sa valeur ? Regarde s'il est dans cette liste.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Wow, tu as vraiment eu de la chance pour avoir réussi a me pinger, car le reseau a été supprimé, j'ai du réinstaller Hamachi a cause d'un probleme de tunnel pour pouvoir jouer avec des potes sur Minecraft ( je m'égare ), et j'avais pas penser a re-tester maintenant que mon Hamachi est opérationel !
    Je viens de tester avec ma nouvelle IP Hamachi ( 25.91.138.189 ) et miracle, ca fonctionne !

    J'ai quand même fais ce que tu m'as demander avec une IP au hasard :
    Si avant le bind je met "errno = 0", ben il m'affiche "Errno = 0"
    WSAGetLastError() = 10049 -> WSAEADDRNOTAVAIL -> "The requested address is not valid in its context." Tu avais donc raison

  8. #8
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 480
    Points : 13 677
    Points
    13 677
    Billets dans le blog
    1
    Par défaut
    En fait je ne peux pas pinguer l'adresse, j'ai juste vu la 1ere ligne, j'ai dit OK alors qu'en fait à la ligne suivante ça time out.... Il faut vraiment que j'aille dormir...

    C'est important de retenir ce "détail" sur errno et les sockets avec Windows ! Les messages de perror() sont en fait obtenus à partir de errno et strerror(), donc si le premier est faux, la seconde ne peut pas rendre un résultat correct. Je vais me noter ça dans un coin.

    Si ton problème est résolu, tu peux cliquer en bas de la page sur

    Bonne nuit.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup !

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

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, 18h07
  2. recv(): Result too large
    Par Trietch dans le forum Réseau
    Réponses: 4
    Dernier message: 28/04/2014, 23h59
  3. connect() - result too large
    Par stephane543 dans le forum Réseau
    Réponses: 4
    Dernier message: 03/05/2010, 01h54
  4. Réponses: 1
    Dernier message: 22/07/2005, 14h32
  5. Error 124 : statement part too large
    Par cedchantrel dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 29/03/2005, 11h30

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